请教C语言题目

1)若有以下定义,且0<=i<6,则正确的赋值语句是
int s[4][6],t[6][4],(*p)[6];

A) p=t;
B) p=s;
C) p=s[i];
D) p=t[i];
答案为什么是B,其余选项哪里错了

2)若有以下定义,且0<=i<4,则不正确的赋值语句是
int b[4][6],*p,*q[4];

A) q[i]=b[i];
B) p=b;
C) p=b[i];
D) q[i]=&b[0][0];
答案为什么是B?其余选项哪里错了
谢了
小弟在自学C语言指针,做题有点晕。为什么第一题的B选项是对的而C选项是错的;还有第二题的B选项为什么错(p不能指向二维数组的首地址吗)。有劳各位大侠讲解一下,谢了。

首先明确这几个问题。int s[4][6]:4行六列的二维数组 t[6][4]:六行四列的二维数组 (*p)[6]:指向n行六列的二维数组的指针
1、A p指向的二维数组和t的列数不符合。
C和D p是二维数组的指针,s[i]t[i]表示一行,近似一维数组

2、*p:指向int型变量指针 *q[4]指向int型变量的指针数组。
A q[i]是指针,b[i]是一个一维数组。所以可以。因为指针可以近似看做一个一维数组。
B p是指针,而b是二维数组的首地址。
C 同理A
D q[i]是指针,&b[0][0]相当于把整个的二维数组看做是一个int型变量,取地址赋值,正确。
这里要注意和B进行区分。B是指针指向二维数组的第一个元素的地址,这是不行的。这个是把整个二维数组取地址赋值。D选择如果q[i+1]就是指向整个二维数组的最后一元素的下一地址。

已经说的比较明白 了。楼主,你要好好练习指针啊。第一题,C选项p是指向二维数组的指针,而s[i]是一个数组,当然不可以赋值,就和类型不匹配一样。
第二题,B之所以错了,因为P是一个指针,就是指向一维数组的指针,如果想指向二维数组,必须定义成一个指向二维数组的指针,例如](*p)[6];
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-13
第一题:选B (*p)[6]说明:P是一个指向一维数组的指针变量,并且这个一维数组的每一列有6个元素,选项A每列只有4个元素,选项,C,D都是一维数组,但是每一列只有一个元素,选项C的每列是6个元素,一共4行,所以他符合

第二题:选B *q[4]的意思就是一下子定义了4个指针变量,分别为*q[0]到*q[3] ; 注意区分*q[4]和(*q)[4]的意义是不相同的,
A中q[i]就是一个指针而b是二维数组,所以b[i]就变成了指向普通变量的指针,仍然是一个指针,所以他们之间赋值是可以的; B中b是二维数组指针而p只是普通变量的指针,类型不符,不能相互赋值
C和D,都是一样的,都是普通变量指针的相互赋值关系
总结就是:指针要相互赋值,必须类型一致,指向二维数组的指针不能赋给指向普通变量的指针
第2个回答  2009-04-11
我想想 p是指针 所以它指向的是数组首地址 所以很明显是B
第3个回答  2009-04-12
第一题(*p)[6]意思是p指向一个一维数组,这个一维数组的元素是几个一维数组,这几个一维数组都需有6个元素