[英]Integer pointer assignment glitch while typecasting integer to pointer
#include <stdio.h>
int main (void) {
int *a = (int *) 60;
int *b = (int *) 40;
printf("%lu\n", (a-b));
printf("Integer Size = %lu\n", sizeof (int));
printf("Pointer Size = %lu\n\n", sizeof (int *));
char *c = (char *) 60;
char *d = (char *) 40;
printf("%lu\n", (c-d));
printf("Character Size = %lu\n", sizeof (char));
printf("Pointer Size = %lu\n", sizeof (char *));
return 0;
}
OUTPUT:
5
Integer Size = 4
Pointer Size = 8
20
Character Size = 1
Pointer Size = 8
請解釋輸出。 我無法理解的是什么int * a =(int *)60; 是嗎?
int *a = (int *)60;
聲明a
為指向整數的指針,並將其設置為內存位置60。
int *b = (int *)40;
聲明b
為指向整數的指針,並將其設置為內存位置40。
當您對指針執行算術運算時,算術運算將以整數所指向的數據類型的大小為單位。 所以
a - b
根據它們之間的整數數量計算a
和b
之間的差。 由於整數的大小為4
個字節,地址之間的差為20
個字節,因此結果為20/4 = 5
。
在第二段代碼中,由於它使用char
而不是int
,因此指針指向1字節數據,因此減去指針與減去它們的地址相同。
通常,如果您有兩個指針
T *a;
T *b;
其中T
是任何類型,則
a - b
等效於:
((char *)a - (char *)b)/sizeof(T)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.