这个指针的内存地址是多少?

How*_*Gee 0 c++ memory int pointers

好的,所以在测试中我问了这个问题:

int* ptrA;    // assigned memory address 100
int a = 1;    // assigned memory address 600
ptrA = &a;

What is the memory address of ptrA + 2?
Run Code Online (Sandbox Code Playgroud)

我以为它是606(int是4个字节+其地址a是600 + 2 = 606但显然答案是608,我错过了什么才能使这个真实?

Luc*_*ore 5

这是未定义的行为,表达PtrA + 2是非法的.您只能对您拥有的指针进行指针运算,并且不能在您拥有的数组范围之外的指针或超出范围的指针之外添加或减少指针.

我们仍然可以分析这个(虽然没用,因为UB).你假设地址a600 + 2,但它不是,因为可能sizeof(int*)也是4,所以这变成了600 + 4.所以你得到了600 + 4 + 4 = 608.

  • @Howdy_McGee这可能觉得违反直觉,但在`int*`中加2会移动地址_two ints_,而不是_two bytes_.因为int是4个字节宽,所以实际上是在原始地址中添加了8个字节. (2认同)
  • @KirillKobelev RTFS标准......你错了.只能超出对象末尾的元素**1**的地址......超出UB的范围. (2认同)