为什么不同答案?

Kra*_*ken 9 c arrays pointers

以下是2个程序

第一

#include<stdio.h>

void main()
{
    int a[5]={1,2,3,4,5};
    int *p;
    p=&a;
    printf("%u %u",p,p+1);
}
Run Code Online (Sandbox Code Playgroud)

第二

#include<stdio.h>

void main()
{
    int a[5]={1,2,3,4,5};
    printf("%u %u",&a,&a+1);
}
Run Code Online (Sandbox Code Playgroud)

现在,在两个程序中..我已经在第一个代码中打印了&a的值,并且直接在第二个代码中打印了.

为什么结果不同?

得到的答案是.

for first  3219048884  3219048888
for second 3219048884  3219048904
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 14

类型&aint (*) [5].因此&a+1是一个int比5 秒更远的指针a.然而,类型pint *,因此p+1是一个int比1 更远的指针p.


Jam*_*ran 7

当我运行时,我得到了这个:

1245036 1245040 1245036 1245040
1245036 1245040 1245036 1245056
Run Code Online (Sandbox Code Playgroud)

唯一不同的是在最后一个位置,p+1vs&a+1

p是一个指向整数的指针,下一个整数p+1的地址也是如此.(即在记忆中进一步增加4个字节)

a是一个包含5个整数的数组,因此&a + 1是下一个5个整数数组的地址.(即,在记忆中进一步增加20个字节)