c++ - 如果你给一个指针加1,它是真的加1,还是加4或32?

标签 c++ c pointers

<分区>

假设你有一个指针,由类似的东西产生

int a = 5;
int* pointer = &a;

假设你给指针加1,如

pointer = pointer + 1;

现在假设指针的原始按位表示是

00000000 00000000 00000000 00000000

那么新的表示是 00000000 00000000 00000000 00000001?或者 00000000 00000000 00000001 00000000?或者两者都不是?

我很困惑,因为我觉得给一个数字加 1 应该给它的按位表示加 1。但是,如果将数组的索引加 1,则新地址与旧地址相差 32 位。

最佳答案

当您添加 1 时至 pointer , 然后编译器在后台执行以下算法

pointer = pointer + sizeof(int)*1  

因此,这将取决于数据类型的大小。在大小为 int 的 32 位机器上是 4 字节,因此 4*1 = 4将添加到 pointer .

例如,如果 pointer指向内存地址 0x00000000然后它将指向 0x00000004添加 1

enter image description here

关于c++ - 如果你给一个指针加1,它是真的加1,还是加4或32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743329/

相关文章:

c++ - 使用我自己的 Point 类自定义 CGAL 内核

c - 为什么 strcpy 返回 char * 而不是 char

java - JNA:如何将指针传递给局部变量?

c - 冒泡排序指针数组

c++ - 位数的数据类型大小

c++ - 以下代码不会对 Stdout 做出任何响应

c++ - 如何在运行时检查对象是否派生自特定类?

计算变化的 C 程序

c - 在 C 语言中使用 ALSA 在 Raspberry Pi 上进行录音和播放

pointers - 在 Go 的循环中处理指针结构的正确方法是什么?