作业帮 > 综合 > 作业

C语言3道选择题。每道题要说明理由。我做错的,但不知道原因。谢谢

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/29 01:17:21
C语言3道选择题。每道题要说明理由。我做错的,但不知道原因。谢谢
1、以下语句或语句组中,不正确的操作是__________。
(A)char t[50];scanf(“%s”,t); (B)char t[]=”English”;
(C)char *p;gets(p); (D)char *p;p=”English”;
2、若有以下定义:
chars[10]=”Computer”,*ps=s;
则不能代表字符m的表达式是__________。
(A)ps+2 (B)ps[2] (C)s[2] (D)ps+=2,*ps
3、对int a[3][3],*p=&a[0][0]; 下列写法中有__________种能正确取到a[2][1]的值
(1)p[7] (2)*(a[1]+4) (3)*(a+2)[1]
(A)0 (B)1 (C)2 (D)3
答案是D、A、C
C语言3道选择题。每道题要说明理由。我做错的,但不知道原因。谢谢
第一题:规则规定不能给char *型指针赋值一个字符串常量,char *型指针只可以用一个字符串“初始化”。即char *p="English"正确,而char *p;p="English";不正确,前者是初始化,后者是赋值。
第二题:ps+2是指针,不是取值;若是*(ps+2)就取到m了。
第三题:一共9个元素,顺序从0排到8,a[2][1]就是第7个(注意从0开始数)元素。所以,p[7]显然是对的;*(a[1]+4)是把a[1]当指针,+4后刚好指向这个数,用*取出来没有错;看一下*(a+2)[1],本来
(a+2)就是最后一行的指针,后面加上[1]就取到这个数了,可是(a+2)前多了个*,但*的优先级比[]低,所以*(a+2)[1]是把a[2][1]这个元素值当指针取它指向的值了,错了。最后答案是2个能取到这个元素,所以C正确。