#include <iostream> using namespace std; int main() { int a[4] = {1,2,3,4}; cout<<"sizeof(a) is "<<sizeof(a)<<endl; cout<<"sizeof(a[0]) is "<<sizeof(a[0])<<endl; cout<<"addr of &a is "<<&a<<endl; cout<<"addr of a is "<<a<<endl; cout<<"addr of &a+1 is "<<&a+1<<endl; cout<<"addr of a+1 is "<<a+1<<endl; cout<<"addr of a[0] is "<<&a[0]<<endl; cout<<"addr of a[1] is "<<&a[1]<<endl; cout<<"addr of a[2] is "<<&a[2]<<endl; cout<<"addr of a[3] is "<<&a[3]<<endl; cout<<"&a+1 - &a is "<<(int)(&a+1)-(int)&a<<endl; }
&a 和 a 的值虽然都是一样的。但是表示的含义不同
&a 表示的是整个数组的首地址。
a 表示的是首元素的首地址。
实际上a和&a[0]是等价的。
所以这就导致了&a+1、a+1结果不一样。
&a+1 表示的是 数组首地址+偏移量*sizeof(整个数组大小)
a+1 表示的是 首元素的首地址+偏移量*size(元素大小)
指针形式访问、下标形式访问:
a[0]、a[1]... 就是数组下标的访问形式;这种形式可以访问到数组中的每个元素;
a+1 则是指针的访问形式;
可看出来a+1和a[1]是等效的;
指针的访问形式会由系统进行地址偏移的计算。使用者只需要提供偏移量。