作业帮 > 综合 > 作业

C语言中二维数组的指针问题

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/05/10 06:59:59
C语言中二维数组的指针问题
假设有 int a[3][3],*p; 要正确赋首地址值只可以p=a[0] p=&a[0][0]而不能 p=a?
书上所说的“p=a容易造成概念上的混淆”在哪里?
C语言中二维数组的指针问题
a[0] 等价于 *(a+0)它指的是0行0列的元素地址
&a[0][0] 也是指0行0列的元素地址
p=&a[0][0] 它的意思的使指针p指向数组a的第0行第0列,而在后面执行p++的时候,就会使指针顺序后移,依次指向 a[0][1] a[0][2]……a[2][2] 的地址;
假如:p=a 这是使指针p指向数组a的首行,当你输出*p这个值的时候,它输出的值是a[0][0]这个元素的值,但是当你执行p+1的时候,那么p就会指向数组a的序号为1的行,即指向了a[1][0]这个元素所在的行了.p始终指向数组a的行,而不指向列.
虽然p=a[0] p=&a[0][0] p=a 这三个语句都是例p指向数组a的a[0][0]这个元素,但它们的意义是不一样的.另外p=a这个语句是合法的,不是不能用,而是在你想要使p指向数组a的首元素地址时,不建议你使用p=a这个语句,容易混淆.
初学者会搞不清这个指针是指向行还是指向列.