c语言指针一览第二部分(新手向)

这一部分是上一部分的具体延申

1.这一部分有一个思维陷阱在于二维数组中,a+i是指行的地址, * (a+i)可以等效成a[i]即i行0列的地址,也可以认为 ( a+i)就是一个简单的行地址,总而言之a+i指向的(a+i)可以既可以具备列属性也可以具备列属性。
2.a+i是指这一行所占数组的全部元素。
3.二维数组行加 * 变列(例如a变成*a指的是a[0]+0),列加&变成行,例如(a[0]变成&a[0]指的是第0行的地址)
4.指向多维数组元素的指针变量(设 * p了lol)
5.通过指针变量的修改来实现对二维数组的操作,我们可以把二维数组看作一个拉长的一维数组(不是看作是就是?),设有一个数组是a[3][3],定义 * p=a这样 * (p+5)含义就是 * p(1 * 3+2)就是a[1][2],很简单吧!(现在的我还看不出有啥用,假以时日我希望以后的我能嘲笑现在这句话:)
6.最后一部分比较重要的啦–>指向行向量一维数组的指针变量:首先我们定义一个二维数组int a[10][4] 然后给出下列定义: **int ( * p)[4]该定义表示p是一个指向行向量一维数组的变量指针,它指向的是包含4个元素的一维数组,把他加工成一维数组后,就可以解锁直接使用地址: * ( p+i)+j作为任意查找二维数组值的地址啦!!
tips:之前曾经又说到过 *(a+i)+j那么这里的区别就在于p作为指针是可以任意移动的a却不行!

猜你喜欢

转载自blog.csdn.net/weixin_44067773/article/details/84999986