#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;
}
输出:
5
Integer Size = 4
Pointer Size = 8
20
Character Size = 1
Pointer Size = 8
请解释输出。我无法理解的是 int * a =(int *)60; 是什么?
答案 0 :(得分:3)
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)