C语言指针重点
指针
指针与一维数组
万能公式
- p[i] = *(p+i) = (i+p) = i[p]
&p[i] == &((p+i))== p+i
指针与二维数组
传向二维数组,本质上是传递二维数组的第一行的指针
二维数组万能公式: ((p+i)+j)=a[i][j]
- 对于一维数组而言,array + i 是array[i]的地址
- 二维数组--->本质上就是n行个的一维数组--->每个有m列的一维数组
- 行指针:a+i = &a[i] 即指向一行的指针
- 列指针:a[i] = *(a+i) = &a[i][0] 即指向一列的指针
上述行指针与列指针的数值相同,但意义摆在那了,并不同。
下面举一个例子:
int a[3][4];
a+1 则是行指针
*a则是列指针 参考一维数组与指针万能公式
a[1][0] 就是一个y[0]
a[1][1] 就是一个y[1] <---y+1
这个y就是一个普通的数组了
二维数组中
a[1]+1 ==>跨一行 行指针
*(a+1)+1 ==>跨一列 列指针
二维数组做形参:a[][2] 前一个可省,后一个不可省
行指针
定义形式:数据类型(指针名)[一维数组维数]
eg.int (p)[4];
p是行指针, *p+j则是列指针
而
int *p[4];
数组中每个元素都是个指针;
传递任意维数的数组本质上就是传递指向数组中的第一个元素的指针变量!