c - 添加对指针的操作

标签 c pointers

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/

相关文章:

c - 空指针不在 C 中保持为空

c++ - 填充指针 vector

c - 初始化并打印 const char 指针

c - 绕过 BIOS 低级别启动当前操作系统以外的另一个操作系统

c - 从 C 代码获取 ALSA 峰值

c - 为什么前几个字符串赋值比较慢?

C#:显式声明 "unsafe"/编译器选项的好处

c - 这个反转位序函数是怎么回事?

c - 强制线程上下文切换

c - c中int**函数的返回