一道简单的C语言题

int s[4][5],(*ps)[5];
ps=s;
则对s数组元素的正确引用形式是
A、 ps+1
B、 *(ps+3)
C、 ps[0][2]
D、*(ps+1)+3
答案是C 为什么?请详细解释一下各个选项 谢谢

分析:(*ps)[5]意思是指向含有5个元素的一维数组的指针,就是PS是个二级地址,s[4][5]是个二维数组,S也是二级地址,所以PS和S在一般情况下可以互换(S是常量,不能赋值变换)。所以可以把PS换成S容易理解。
A选项:PS+1即S+1.它表示第二行的地址。是一行,而不是一个元素。所以不选。
B选项:*(PS+3)即*(S+3),*表示指向。所以表示s[3],并不是数组中的元素。所以不选。
C选项:PS[0][2]就是S[0][2],它表示数组中第0行第二列的元素。所以选他。
D选项:*(PS+1)即S[1],*(PS+1)+3即第一行第三列的地址,而不是元素。(如果是*(*(PS+1)+3)的话就是元素啦)。
好啦,我就只能表达成这样啦,但愿你能听懂,实在不行,看看谭浩强的《C程序设计》就明白啦!!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-10
ps就相当于一个二维数组嘛

那如果解释二维数组怎么引用正确,是否你就理解呢
第2个回答  2009-05-10
ps是行指针,可以理解为和二维数组名s等价,选C
第3个回答  2009-05-10
首先P是一个数组指针 也就是“2级地址”
ps+i指向数组a的第i行即&s[i]
*(s+i)就指向了数组s的第i行的第一个元素即&s[i][0]
*(s+i)+j 指向了数组s的第i行的第j个元素即&s[i][j]
*(*(ps+i)+j)就是s[i][j]的值了
s[i][j]=ps[i][j]
相似回答