【发布时间】:2019-05-18 21:30:54
【问题描述】:
我正在学习 C,我看到了这段代码,但我无法区分。有人可以解释一下吗?谢谢。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int addressAsInt = 0x61FF08;
printf("address = %p\n", addressAsInt);
int address2AsInt = 0x61FF14;
printf("address2 = %p\n", address2AsInt);
printf("rest = %d\n", address2AsInt - addressAsInt);
int* address = (int*) 0x61FF08;
printf("address = %p\n", address);
int* address2 = (int*) 0x61FF14;
printf("address2 = %p\n", address2);
printf("rest = %d\n", address2 - address);
return 0;
}
第一个差分输出 0000000C,第二个差分输出 00000003。 第一个懂,第二个不懂。
【问题讨论】:
-
指针算法是没有意义的,除非它们都是指向同一个对象的指针(或者对于一个数组,只是过去)。
-
第二种情况,相差3
ints。 -
addressAsInt是一个整数。使用%p打印会调用未定义的行为[ -
指针算法的工作方式类似于数组索引。当您访问
int array[]中的第二个元素时,您使用的是array[1]而不是array[4]。
标签: c