总结:

下标运算符又叫变址运算符,变址内容 *(p+n)==p[n]

指针是变量,这个变量的值是个地址

a[0]和a[0][0]都是数,而且它们的首地址相等,区别是它们的数据类型不同

a[0]这个数的数据类型是一维数组,a[0][0]这个数的数据类型是整数,a指向的数据类型是一维数组,所以a+1,内存移动12个字节。

-----------------------------------------------------------------------------

以数组下标的方式来访问其中的某个元素:a[i][j]。编译器总是将二维数组看成是一个一维数组,而一维数组的每一个元素又都是一个数组。a[3]这个一维数组的三个元素分别为:
a[0],a[1],a[2]。每个元素的大小为sizeof(a[0]),即sizof(char)*4。由此可以计算出a[0],a[1],a[2]三个元素的首地址分别为& a[0],& a[0]+ 1*sizof(char)*4,& a[0]+ 2*sizof(char)*4。亦即a[i]的首地址为& a[0]+ i*sizof(char)*4。这时候再考虑a[i]里面的内容。就本例而言,a[i]内有4个char 类型的元素,其每个元素的首地址分别为&a[i],&a[i]+1*sizof(char),&a[i]+2*sizof(char)&a[i]+3*sizof(char),即a[i][j]的首地址为&a[i]+j*sizof(char)。再把&a[i]的值用a 表示,得到a[i][j]元素的首地址为:a+ i*sizof(char)*4+ j*sizof(char)。同样,可以换算成以指针的形式表示:*(*(a+i)+j)。  //上述i中乘4是因为每个a[i]内有4个char 类型的元素

----------------------------------------------------------------------

char **p;//二级指针变量p,假设此时的p已经指向p2,解引用后,获得完整的数据,即p2中保存的地址,p得以指向c,再次对p解引用,即得到‘A’

 

引自:http://c.biancheng.net/cpp/html/477.html

 

posted on 2018-08-28 22:08  泰坦妮克号  阅读(238)  评论(0编辑  收藏  举报