#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; 的作用?
最佳答案
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)
关于c - 将整数类型转换为指针时出现整数指针赋值故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36274445/