c语言大神进 c语言中,例如一个二维数组a[3][4],则a与a[0]代表的意思一样吗?a

c语言大神进

c语言中,例如一个二维数组a[3][4],则a与a[0]代表的意思一样吗?a与*a呢?我在书上看它们代表的意思一样,可为什么这样的语句是错误的,如下
char str[][10]={"ok","good"},*p;
p=str;
上一句是错的,而p=str[0]则是正确的,str与str[0]不都是代表二维数组str[0][0]吗?

题主还是不理解指针。

char str[][10]={"ok","good"},*p;

这个定义里str相当于一个二维指针,而p是一维指针。

二维数组在内存中按行存储,所以可以说整个二维数组包含两个一维数组,也就是两行,第0行是“ok”,第一行是“good”。 "ok"和"good"的首地址分别为(一维指针)str[0]和str[1],str[0]只是指向二维数组第一行的(一维)指针,而str是指向整个二维数组的(二维)指针,所以,p和str[0]都是一维字符型指针,赋值是没问题的,但是p=str;是不对的。

追问

谢谢啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-03-21
char *p是一维的, str是2维的,p=str,二者不匹配。str[0]是一维的,与p同类型。
a与a[0]只是在使用a的首地址这个值时意义才一样。

a是地址,*a是取a这个地址中存储的一个byte.[看数值类型,如果是整数,则是取整数]本回答被提问者采纳