int a[3];
int *j;
a[0]=90;
a[1]=91;
a[2]=92;
j=a;
printf("%d",*j);
printf("%d",&a[0])
printf("%d",&a[1]);
printf("%d",*(j+2));
这里指针变量j
指向a[0]
,即90;而a[0]
的地址是 - 20 在我的机器上。所以j
持有-20。
而a[1]
的地址是-18。因此,要获取下一个变量,我应该使用 *(j+2)。因为 j+2
的结果是 -18。但这确实正在发生。访问a[1]
。我必须使用*(j+1)
。但是j+1=-19
。为什么 j+1
的结果是 -18 ?
最佳答案
地址未签名。您将它们当作 int
来打印,但它们不是 int
。使用 "%p"
作为格式说明符。这就是打印指针地址的方法。
此外,指针算术与您习惯的算术不同。在内部,向指针 p
添加 1 会将地址增加 sizeof *p
字节,即,将 增加到下一个对象。
这很方便,因为它使程序员在对指针执行算术时不必总是使用 sizeof
(您实际上很少想增加 sizeof *p
以外的值) code>。当您这样做时,您首先转换为 char*
。)
关于c - 添加对指针的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21925356/