C语言指针有点绕的地方

对于二维数组a[3][4]来说,a+1是二维数组a中序号为1的行的起始地址,而*(a+1)并不是a+1单元的内容(值),因为a+1并不是一个数组元素的地址,也就谈不上存储单元的内容了。*(a+1)就是a[1],而a[1]是一位数组名,所以也是地址,它指向a[1][0]。a[1]和     *(a+1)都是二维数组元素a[1][0]的地址的不同表现形式。

a和a+1都是指向行的指针,在它们前面加一个*就是*a和*(a+1),它们就成为指向列的指针,分别指向a数组0行0列的元素和1行0列的元素。反之,在指向列的指针前面加&,就成为指向行的指针。例如a[0]是指向0行0列元素的指针,在它前面加一个&,得到&a[0],由于a[0]与*(a+0)等价,因此&a[0]与&*a等价,也就是与a等价,它指向二维数组的0行。

发布了10 篇原创文章 · 获赞 7 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/xrn1997/article/details/100140889
今日推荐