c语言的选择题 麻烦讲得详细一点

如题所述

这题出的就纯属蛋疼……
第一个题:
sum=pad=5;//这个时候sum和pad都被赋值为5
pad=sum++,pad++,++pad;
//其实就和你图上写的一样,这是一个逗号表达式,分成三个部分(pad=sum++)(pad++)(++pad)
//最后的答案就是A7。就像我们老师说的,这种蛋疼问题直接运行一下就哦了。
第二题:
这个必然选c,d啊;
str1是在声明数组的时候进行的赋值。字符串长度为7
str2是直接声明了数组长度。字符串长度为8
str3是一个字符指针,没有指向实际的内存地址。只有一个int类型的大小。
str4是声明了一个指针,指向的是程序“string”这个字符串在内存中的首地址。
c给没有空间的字符指针赋值,当然失败;
d要修改程序在内存中的内容,也当然失败。
第三题:
答案是D;
首先分析题意,这个是个结构体。这个结构体有两部分组成:一部分数值域,一部分指针域(指向同类型的指针)
然后给一个三个元素的数组赋值
n *next
0 5 1元素
1 7 2元素
2 9 空
p指向了0元素
A选项是 p++->n 因为是先试用在自加,所以指向了0元素的值域,是 5;
B选项是 p->n++ 操作的是滴0个元素的值域自加,但是返回值是自加前的值,是 5;
C选项是 (*p).n++ 同c;
D选项是 ++p->n 操作是选择了第0个元素的值域 5 ,因为是先自加在使用,所以是 6。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-26
1.逗号表达式返回的是最后逗号之后的数,pad++,++pad,加两次之后就是7

32.
cd应该都不对,因为str3和str4都是指针,定义的时候并没有给他们分配自己的内存空间,所以不能
直接strcpy。

34.
static struct st s[3]这句定义了3个st的结构,a[0].n=5,a[0].next是 a[1]的地址,这个不会是6这么小的数字。a[1].n=7 a[1].next是a[2]的地址,a[2].n=9, a[2].next=0,就是NULL,p=&a[0],所以p就指向了a[1]。

p ++->n返回的就是p->n,也就是a[0].n,就是5
p->n++先返回p-> n再n++,所以还是返回5
(*p).n++和上面的是一样的,无非上面的是用指针获取,这个是得到实际的struct再获取
++p->n就是对p->n执行++操作再返回,就是5+1,也就是6
所以选d本回答被网友采纳
第2个回答  2012-12-26
第一题,实际是这样执行的,
sum=5;
pad=5;
pad=sum;
sum= sum+1;
pad=pad +1;
pad=pad+1;
结果是7.因为逗号的优先级比=号的低,可当做分号对待.
第2题.char *str4="string",这个字符串定义一般在常量区,内容不可更改,但有的编译器则不,所以有可能是错误的.
char *str3;这个指针如果声明在函数外则值为0,这一般是操作系统保留区,有可能你无权访问,如果定义在函数内,值是未知的,运气好的话能正确执行.
第3题,当然是D了,只有前++才能返回加后的值.那个'\0'类型错误,C++编译器是编译不过去的.
综上所述,我有80%的把握判定你的编译环境为TC2.0,一个古老的编译器.
第3个回答  2012-12-26
这个,我是2012年3月考的,现在都忘完了。。。不好意思啊!
第4个回答  2012-12-26
1. A
32. D
34. D
相似回答