首页 > 解决方案 > 递增时的双指针给出不同的地址

问题描述

昨天我在搞乱双指针,这种行为是意料之中的:

int main(){
   char arr[2][10] = {"Burger", "Pizza"};
   char **ptr = (char**) arr;

   printf("%p %p\n", arr, ptr); // first printf
   printf("%p %p\n", arr+1, ptr+1); // second
   printf("%p %p\n", arr[0], *ptr); // third

   puts(ptr);
   puts(ptr+1);

}

在这个例子中,我假设,arr并且ptr指向同一个地址,并且这个假设在第一个 printf 中被证实是正确的:

0x7fffe4fd5010 0x7fffe4fd5010

其次,我假设 ,arr+1ptr+1, 也都指向同一个地址,但是当我尝试运行它时,输出不是:

0x7fffe4fd501a 0x7fffe4fd5018

这怎么可能?C 编程语言有什么我缺少的吗?

标签: c

解决方案


推荐阅读