在数组中a和&a的区别

来源:百度知道 编辑:UC知道 时间:2024/06/28 11:06:40
运行下面一个程序:

#include<iostream>
using namespace std;

void main(){int a[6]={1,2,3,4,5,6};

cout<<"a="<<a<<endl;
cout<<"a+1="<<a+1<<endl<<endl;cout<<"a+1="<<a+sizeof(*a)<<endl<<endl;

cout<<"&a="<<&a<<endl;
cout<<"&a+1="<<&a+1<<endl<<endl;

cout<<"&a+1="<<&a+6*sizeof(int)<<endl;
}

得到结果

a=0012FF68
a+1=0012FF6C

a+1=0012FF78

&a=0012FF68
&a+1=0012FF80

&a+1=001301A8

可以得出,'&a+1'-'&a+1'即一个单位长度减去'a+1'-'a+1'得到6,是数组的元素个数。

我还不明白的是 sizof(*a) = 4; 所以 a+sizeof(*a)相当于 a+4 ,那么,为什么第二个'a+1'和第一个的差值是12呢? 这个12代表什么含义?
上面说'a+4'是表示‘a'+4, 4是4个长度单位,不是到第四个数组元素,所以对于iqlimitless 的回答我还是不能认同,这是我的错,没有说清楚。

指针+1代表移动一个元素的长度
因为a是整形数组,一个元素占4字节
所以a+1的移动一个元素的话等于是就是移了4个字节
a=0012FF68 那么
a+1=0012FF68
a+2=0012FF70
a+3=0012ff74
a+sizeof(*a)=a+4=0012ff78
因为(a+4)-(a+1)=3,那么等于是移动了三个元素的长度,也就是3*4=12

&a 是a的地址