2022年自学考试《C语言程序设计》习题及答案15
【1.71】已知:char a[3][10]={'BeiJing','ShangHai','TianJin'},*pa=a;不能正确显示字符串'ShangHai'的语句是。
A)printf('%s',a+1);B)printf('%s',*(a+1));
C)printf('%s',*a+1);D)printf('%s',&a[1][0]);
【1.72】已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*ptr)[3]=a,*p=a[0];
则以下能够正确表示数组元素a[1][2]的表达式是。
A)*(*(a+1)+2)B)*(*(p+5))C)(*ptr+1)+2 D)*((ptr+1)[2])
【1.73】已知:int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a;则值为3的表达式是。
A)p+=2,*(p++)B)p+=2,*++p C)p+=2,*p++D)p+=2,++*p
【1.74】已知:int a[]={1,2,3,4},y,*p=a;则执行语句y=(*++p)--;之后,数组a各元素的值变为______。
A)0,1,3,4 B)1,1,3,4 C)1,2,2,4 D)1,2,3,3
变量y的值是____。
A)1 B)2 C)3 D)4
【1.75】已知:int a[]={1,3,5,7},y*p=a;为使变量y的值为3,下列语句正确的是____。
A)y=++*p++;B)y=++(*p++);C)y=(++*p)++;D)y=(*++p)++;
【参考答案】
【1.71】答案:C
注释:a是二维数组名,a+1中的1不是1个字节,而是数组的'一行',即10个字节,所以a+1是第二个字符串的首地址,A选项正确。在C编译系统中对二维数组名可这样理解(注意,这里仅是理解):a指向一个一维数组,故(a+1)是指向a[1]的,*(a+1)就是取a[1]的值,它保存第二个字符串'ShangHai'的首地址,所以选项B也正确。*a是第一个字符串的首地址,加1是第一个字符串中第二个字符的地址,选项C的输出是'beiJing'。选项D中的&a[1][0]是对第二个字符串的第一个字符做取地址运算,得到该地址就是字符串'ShangHai'的首地址。注意,对于二维数组来说,做一次*或[]运算的结果仍是地址量,做两次才是取数值。
【1.72】答案:A
注释:p是一个一级指针,选项B中对它进行了两次*运算是错误的。ptr是一个指向一维数组的指针,它所指向的数组有三个元素,对于这样一个指针,对它进行两次**运算才能取出地址单元中所存的数据,C选项中*ptr表示数组第一行的首地址,该地址是一维数组的地址,+3表示加上三个它所指向的数据类型的长度,所以(*ptr+1)+2是数组中数值4的地址。根据以上分析,选项D对ptr进行了两次地址操作(*和[]),所以结果应是数据,但是它加1后指向数组第二行,根据后面[]中2它的地址增加两个一维数组的长度,就指向数组的最后一行,再做*运算就是数10,即a[3][0]。
【1.73】答案:A
【1.74】答案:B
【1.75】答案:D
热门推荐:
自考有疑问、不知道如何选择主考院校及专业、不清楚自考当地政策,点击立即了解》》
推荐阅读: