C语言基础【19】:指针6
1.任何数组在存储上都是一维的,所以只要我们找到数组首元素地址,就可以通过一阶指针变量来遍历数组(或者定位数组任何一个元素)。
int arr[][];
int row = sizeof(arr)/sizeof(arr[0]);
int col = sizeof(arr[0])/sizeof(arr[0][0]);int *p = &arr[0][0];
for(int i = 0 ,i < row*col,i++)
{printf("%d",p[i])
} //遍历二维数组,其实和遍历一维的一样//同理需要定位任何一个位置,都可以用p[]来定位
2.地址作为函数参数,地址的单项传递
指针变量作为函数参数可以在函数内部改变指针指向变量的值。
所以需要函数改变变量的值,就要传递地址给到函数。(可以用&,也可以先定义指针指向地址)
3.数组名作为函数形参,会被优化为地址
其实,在很多情况下,数组名都会被优化为地址,也就是说在很多情况下arr==&arr[0]这个式子是成立的。当然也有特例,比如之前提到的n=sizeof(arr)/sizeof(arr[0]),如果这个式子依然成立,那么我们是不是可以认为sizeof(arr)==4||8?显然如果这样认为,前面的求n的式子是无意义的。 总结arr不会被优化的情况有:1.sizeof 2.对arr取地址,也就是数组的首地址