首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
若有定义;int w[3][5];,则以下不能正确表示该数组元素的表达式是( )。
若有定义;int w[3][5];,则以下不能正确表示该数组元素的表达式是( )。
admin
2013-02-23
59
问题
若有定义;int w[3][5];,则以下不能正确表示该数组元素的表达式是( )。
选项
A、*(*w+3)
B、*(w+1)[4]
C、*(*(w+1))
D、*(&w[0][0]+1)
答案
2
解析
通过—维数组名或指向维数组元素的指针来引用数组元素有两种写法:a
和*(a+i),它们是等价的。这是一种运算符之间的等价转换,就好像a-(b-C) 等价于a-b+c一样。知道了这种转换,我们可以将之扩展到二维数组甚至任意维数组上来。因为[]运算符的结合性是从左至右的,所以w
[j]等价于(w
[j],此时可以先将任意一个[]运算符转换为指针形式为:(*(w+i)[j]或*(w
+j),或者同时转换:*(*(w+i)+j)。上述几种形式都完全等价于w
[j]。选项A中,*(*w+3)可以看成*(*(w+0)+3),即w[0][3],是正确的。选项B小,因为[]运算符的优先级高于*运算符,所以*(w+1)[4]等价于*((w+1)[4]等价于 *(*((w+1)+4)),即*(*(w+5)+0),它等价于w[5][0],很明显它超过数组的范围了,故不正确。选项C等价于w[1][0],是下确的。选项D中,&w[0][0]是数组w第1个元素的地址,它等价于&*(*(w+0)+0),外面的&和*可以抵消,就好像先乘以个数,然后再除以这个数一样。所以,&w[0][0]等价于*(w+0)+0。即*w。所以原式就变为*(*w+1)等价于w[0][1],这个也是合法的。综上所述,本题应该选择B。
转载请注明原文地址:https://www.kaotiyun.com/show/1HJp777K
本试题收录于:
二级C语言题库NCRE全国计算机二级分类
0
二级C语言
NCRE全国计算机二级
相关试题推荐
下列程序的运行结果为#include<stdio.h>voldabc(char*str){inta,b;for(a=b=0;str[a]!=’\0’;a++)if(str[a]!=’c’)
阅读如下程序段#include"stdio.h"main(){intx,a,b;scanf("%d",&x);a=b=x;for(;x!=0;){if(x<b)b=x;
有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件—组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数。请选择填空。#include<stdio.h>main(){
在16位C编译系统上,若定义longa;,则能给a赋值40000的正确语句是()
对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为______。
在面向对象方法中,类之间共享属性和操作的机制称为【】。
下述函数通过递归方法将字符串倒置,使用时需要指定字符数组的首地址、起始下标和终止下标。请填空:#include<stdio.h>voidfun(char*s,intlow,inthigh){if(【】)
以下叙述中错误的是 ______。
数据库存管理系统常见的灵敏据模型有层次、网状和【】三种。
可以在C语言程序中用做用户标识符的一组标识符是()。
随机试题
Whenanynon-humanorganistransplantedintoaperson,thebodyimmediatelyrecognizeditas______.
以下哪一事件不是急性中毒事件
男,35岁。左下颌第三磨牙区疼痛5周,左侧咬肌区肿痛4周,切开见大量黄色黏稠脓液,X线片可见左侧下颌角区骨质疏松最可能的感染细菌是
组成混凝土的主要材料有()。
常用的反映失业程度的指标有()
梦魇是学前儿童中较为多见的一种睡眠障碍。()
同样走100米,小明要走180步,父亲要走120步。父子同时同方向从同一地点出发,如果每走一步所用的时间相同,那么父亲走出450米后往回走,还要走多少步才能遇到小明?
一台交换机具有24个10/100Mbps全双工端口和2个1000Mbps全双工端口,如果所有端口都工作在全双工状态,那么该交换机总带宽为()。
JacksonNathan
A、Makinganappointmentwiththedentist.B、Removingtoothcheckingfromtheman’sschedule.C、Havinghistoothcheckedrightaw
最新回复
(
0
)