猿问

如下是关于c++的三个问题,麻烦大神帮忙分析一下~

28. 设有如下说明
typedef struct ST
{long a;int b;char c[2];}NEW;
则下面叙述中正确的是
A. 以上的说明形式非法
B. ST是一个结构体类型
C. NEW是一个结构体类型 C
D. NEW是一个结构体变量

27. 若有以下说明和定义
union dt
{int a;char b;double c;}data;
以下叙述中错误的是
A. data的每个成员起始地址都相同
B. 变量data所占的内存字节数与成员c所占字节数相等
C. 程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000 C
D. data可以作为函数的实参

7. 在TC中,已知: unsigned int x=65535;则执行以下语句后的x 值为 ( )。 printf(“%d\n”,x);
A. 65535
B. 1
C. 无定值
D. -1
D

森林海
浏览 160回答 3
3回答

开心每一天1111

第一题:C,C语言中,struct ST是一个数据类型的名字,NEW是对他起的别名,具体参见typedef的定义。所以选择C。第二题:C选项中,由于整型数和浮点型数内存中编码方式不同,所以输出肯定不会是5.000000,B选项是对的,因为UNION的类型的特征就是这个。第三题:由于无符号数和有符号数的编码方式不同,对于无符号数的65535,当作有符号数的时候,会十个负数,选项D。

呼啦一阵风

28、CD是错误的,注意前面有typedef,如没有,D正确。关于类型名称这点没什么具体的说法,非要说struct ST是类型,而ST不是类型,但定义时候应使用struct ST,而不是ST。 B也没什么严格错误。27、Cprintf中的格式控制是%f,也就是浮点数,所有输出肯定不是5,浮点数内存表示方法不是直接映射的。联合体占的字节是联合体中最大成员所占字节数,所以 B是正确的。7、ATC整型占2字节,16位,所以无符号最大表示是2^16-1=65535。输出可能不会是65535,因为printf是用%d控制,而不是%u。但是题问的是x的值,x值没有改变。这些题没什么意义吧,很不严谨,比如27的A,就有不对的可能,涉及到大端小端(big endian little endian)

摇曳的蔷薇

首先,虽然C++是C的超集,但你的问题全都是C的问题,不涉及C++特性。然后,再具体看你的问题:28:已给出的答案 C 正确。typedef 定义了一个新类型叫做"NEW"。29:已给出的答案 C 正确(即:该叙述错误)。浮点数在内存里的二进制表示方法和整数表示方法完全不同,具体参见IEEE-754标准。同样的二进制内容当做整数值是5时,当作浮点数就完全不是5。7:已给出的答案D正确。它考的是上世纪90年代TC(Borland Turbo C)那个16位编译器的东东,所以严格说这是个历史题不是C或者C++的题。int如果16位长,给出的那个值溢出了,答案是D。但这个年代的机器基本上都是32或者64位的int,没有溢出所以答案会是A。由于结果取决于硬件环境和软件(编译器),如果该题不是问TC这个16位文物的话,答案就是C了。
随时随地看视频慕课网APP
我要回答