先介绍一下概念:数组指针,表示指向数组的指针,或者说指针指向的是数组!
上一篇,介绍了用指针访问、修改普通变量,这篇探索一下数组指针访问、修改数组变量的值。
先上代码:
int main()
{
double m[2][2];
double (*p)[2] = m;
printf("p = %d,m = %d\n",p ,m);
p[1][0] = 1;
printf("%f\n", m [1][0]);
system("pause");
return 0;
}
首先,我们定义一个二维数组,m是二维数组的数组名,也是数组的首地址,相当于二级指针常量。
p是个指针变量,指向一个包含2个元素的一维数组,且p的增量以它所指向的一维数组的长度为单位。
比如,*(p+i )= m[i][0] 。
所以不妨这么理解,二维数组m,本质上,以一维数组为单位,由2个一维数组组成。
double (*p)[2] = m;
这条语句,就是让指针指向一维数组空间,并把数组的首地址赋给p,这时p就等价于m,所以
p[1][0] = 1;
等价于
m[1][0] = 1;
打印m[1][0],发现该元素值确实更新为1。
(注:还有一个概念指针数组,这家伙和数组指针,经常会让人傻傻分不清楚,后面会继续介绍,这俩怎么区分)