以下是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)
当我运行时,我得到了这个:
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个字节)
| 归档时间: |
|
| 查看次数: |
383 次 |
| 最近记录: |