一、指向数组的指针变量
1、指向数组元素的指针变量
由于数组元素与普通一样,所以定义指向数组元素的指针变量与定义指向普通变量的指针变量完全一样
如:int s[10],a,b;
int b[3][6];
int *p;
p=&a;
p=&s[2];
p=&b[2][4];
2.指向一维数组的指针变量
注:(1)在C语言中规定:数组名代表数组的首地址,而且是一个地址常量
如:int a[10];
int *p;
p=a;<=> p=&a[0]
(2)当指针变量指向数组中的某一个元素时,指针变量加1后指向数组的下一个元素,指针变量减1时指向数组中前一个元素。
如:float a[10]; float *p;
p=&a[4]; 则p-3指向 a[1].
(3)当指针变量指向数组时,下运算([])用于数组也可用于指针变量后
(4)若两个指针变量指向同一个数组,则这两个指针变量可以进行大小的比较如:
char s[10];
char *p1=s+3,*p2=&s[7];
则:p1>p2=>0 p1<p2=>1
p1-p2=>-4 p2-p1=>4.
(5)在形参中的数组实际上是一个指针变量,并不是真正的数组,因为该“数组名”的值是可以改变的,而真正的数组名的值是不能改变的。
(6)若形参是数组或指针变量,则在函数中可以通过该形参改变实参的值
3.指向多维数组的指针变量
若a是一个二维数组,则有:
(1)a+i是行指针,即指向的是一整行。若对它加1则指向下一行
(2)*(a+i)和a[i]一样,都是一个列指针即指向的是一个元素
(3)*(a+i)+j和a[i]+j一样,都表示元素a[i][j]的地址。即与&a[i][j]等价
*(a+i)+j a[i]+j &a[i][j]
(4)*(*(a+i)+j)、*(a[i]+j)、(*(a+i))[i][j]和a[i][j]一样,都表示元素a[i][j]
网友评论