一道C语言题目,求解答

若有说明:inta[4][10],如果i、j可能的取值范围是0<=i<4,0<=j<10,则对数组元素a[i][j]引用错误的是______。A)*(&a[0][0]+1... 若有说明:int a[4][10],如果i、j 可能的取值范围是0<=i<4, 0<=j<10,则对数组元素a[i][j]引用错误的是______。
A) *(&a[0][0]+10*i+j) B) *(a+i)[j]
C) *(*(a+i)+j) D) *(a[i]+j)

求详细解答,不要只有答案,谢谢!!!!
展开
 我来答
血影爱羽VRH
2014-05-25 · TA获得超过201个赞
知道答主
回答量:127
采纳率:75%
帮助的人:48.3万
展开全部
【stdlib.h】这个头文件为你下边调用某些C语言提供的函数,比如system提供了调用规则描述。如果你不写这句,在程序编译时就会报错,比如system没有定义之类。那么如果你的程序在编译时报这样的错,你就需要查一下你调用的函数是在哪个头文件定义的(方法是在百度百科中查找该函数说明),把它“包含”进来即可解决。
【argc和argv】是主函数的调用参数,你如果编译程序生成的是windows控制台程序的话,比如生成a.exe在命令行模式下可以这样调用:a.exe 100 100,a.exe后面的两个参数100 和100就是调用时的参数,将会通过这两个变量传送给main函数,你在main中可以使用它们,具体请在百度百科中查argc argv。
【int a[100][100]】开设双下标数值,其中每个数组元素都是int型的,要找到最开始的元素可以写
a[0][0],这相当于告诉系统,我要找的是第0行和第0列的数组元素,最后一个数组元素是a[99][99]。那么你就会发现,后面的程序的循环变量从1开始循环而没有从0开始的话,a数组中所有第0行和第0列的数据都没有得到访问。
【for语句】一个for语句就是一个循环语句,它有条件地执行循环体内的语句,举例来说:
for ( i=1;i<=N;i++ ) { 语句a; 语句b; }这个循环语句相当于下面语句的简写:
i=1;
LOOP:
if ( i<=N )
{ 语句a;
语句b;
i++;
goto LOOP;
}
所以这条语句的意思就是,先让i的值等于1,然后i和N进行对比,如果i小于或等于N则执行循环体语句(只有一个for语句,这时简写了循环体的大括号)for语句,否则循环结束,跳过循环体执行后面的语句for(i=1;i<=M;i++)
【程序的意图】先定义了一个100行100列的数组a;然后输入M和N代表要使用a数组中第1行到第N行、第1列到第M列的数据(M和N要在0~99间取值,否则会运行时出错);接着分别让i控制行号,j控制列号实现将要用到的数据逐行键盘输入;接下来用printf语句显示这些数据("%d"应写成"%d ",省得数据连在一起无法区分),每行换行;最后让操作系统等待用户按任意键后结束程序。
wpiearth
推荐于2016-05-18
知道答主
回答量:12
采纳率:0%
帮助的人:14.5万
展开全部
选C。a是二维数组的数组名,代表数组首元素的地址。*(a+i)代表第i行的地址,那么*(a+i)+j代表第i行、第j列的元素的地址。于是*(*(a+i)+j) 就是数组元素a[i][j]
追问
额。。他说选错误的。。
追答
哦,丢人了。。。
选B。&a[0][0]是a[0][0]的地址,以指针的观点看指向首字节。因为每行10个元素,所以i行j列的首字节的地址就是&a[0][0]+10*i+j,要移动过10*i+j个元素。然后取值*(&a[0][0]+10*i+j)

D中,a[i]和*(a+i)是等价的。

B中,*(a+i)是第i行的地址,这样表示不合规定。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式