为什么指针+1包含的内存地址与指向+ 1的值的地址不同

and*_*i99 2 c pointers pointer-arithmetic

指针存储指向值的存储器地址,因此指针包含的存储器地址与值的存储器地址相同.因此,向这两个内存地址添加1应该会产生相同的结果,这是不会发生的.为什么?这是代码

 int main()
 {
     int ages[] = {23, 43, 12, 89, 2};
     int *cur_ages = ages;

     printf("\n&cur_ages=%p, &cur_ages+1=%p", &cur_ages, &cur_ages+1);
     printf("\n&ages=%p, &ages+1=%p", &ages, &ages+1);
     printf("\ncur_ages=%p, cur_ages+1=%p", cur_ages, cur_ages+1);
     printf("\n*cur_ages=%d, *cur_ages+1=%d", *cur_ages, *(cur_ages+1));

     return 0;
 }
Run Code Online (Sandbox Code Playgroud)

输出是

&cur_ages=0x1ffff85f3d0, &cur_ages+1=0x1ffff85f3d8
&ages=0x1ffff85f3dc, &ages+1=0x1ffff85f3f0
cur_ages=0x1ffff85f3dc, cur_ages+1=0x1ffff85f3e0
*cur_ages=23, *cur_ages+1=43
Run Code Online (Sandbox Code Playgroud)

&age + 1不等于cur_ages + 1.为什么?

dbu*_*ush 7

指针运算通过给定值乘以指向的类型的大小来增加指针的值.

所以当你这样做时:

&ages+1
Run Code Online (Sandbox Code Playgroud)

您获取ages(类型int [5])的地址并添加sizeof(ages)到指针值.假设sizeof(int)为4,则将指针值加20.

同样,当你这样做时:

cur_ages+1
Run Code Online (Sandbox Code Playgroud)

在这里,cur_ages指向a int,所以添加1会增加sizeof(int)指针值.

  • 这是一个很好的例子,说明为什么数组和指针不是*相同的东西. (4认同)