注册 登录
编程论坛 C图形专区

关于二维数组赋值语句

natto 发布于 2016-04-22 17:57, 2830 次点击
定议:int *p,a[3][4];

那么,在二维数组中,指针变量p的基类型与a[i]相同,因此赋值语句p=a[i]是合法的。a[i]能写成*(a+i)。因此赋值语句可以写成:
p=*(a+i);

如上,上面是教材内容,说这样赋值是对的,一直想的不太明白的是,p是指针,那得到的不应该是地址么,但表达式右边得到的是一个地址所在存储单元的值,怎么会对呢?
所以请教:
1、*这个运算符加在赋值号右边不就是表示的是(a+i)这个存储单元地址中的值么,怎么还会是可以赋值给存储地址的p这个指针变量呢
2、a[i]能写成*(a+i),这个可以理解,这是作为值时可以相等,若是作为地址时,*(a+i)都不是表示地址的,怎么可以赋值给一个指针变量呢?这样还可以将a[i]写成*(a+i)??

希望各位前辈指教

[此贴子已经被作者于2016-4-22 18:21编辑过]

5 回复
#2
feng591831752016-04-22 19:45
p是一个变量吧。。
*(a+i)代表了一个变量。。
我是这么理解的。。。
我也刚学。。
#3
natto2016-04-22 21:47
回复 2楼 feng59183175
p是变量,但不是普通变量,如果p是普通变量的话,我就对这个没有任何疑问了
#4
natto2016-04-23 20:07
为什么看的人这么多,答的人这么少,是我表述的不清么,管理,你们也来答答呗
#5
藤田惠美2016-10-11 21:23
我是c语言新人 一块探讨:
好像二维数组中的a[i]代表的是第i+1行数组元素的首地址,第i+1行数据看作是一维数组的话,a[i]就是数组名。
#6
kkggkk2016-10-21 14:32
回得少,是因为你发错版面了,这里是『 C图形专区 』,应该到外面去。

int *p,a[3][4];
等效于
int *p;
int a[3][4];
指针和地址是一体的,没有错。
你搞错的是你说a[i]是存储单元的值,其实,对于你所定义的二维数组,a[i][j]才是内容值,a[i]是地址,地址赋给指针,一点问题也没有。
1