C语言--每日五道选择题--Day23

第一题

1. 已知int i=1, j=2;,则表达式i+++j的值为( )

A:1

B:2

C:3

D:4

答案及解析 C

本题考查的是前置++和后置++的优先级,后置++的优先级是高于前置++的,所以这个表达式就可以转变为:(i++) + j 

而后置++的返回值是++之前的值,所以结果就为3;

第二题

2. 假定有定义为“ int a[10], x, *pa=a; ”,若要把数组 a 中下标为 3 的元素值赋给 x ,则不正确的赋值为 ( )

A:x=pa[3]

B:x=*(a+3)

C:x=a[3]

D:x=*pa+3

答案及解析 D

A:pa是指向的a数组的首元素地址,所以pa就相当于数组名,pa[3]正确;

B:*(a+3)就是让a指针向后移动3个元素,到下标为3的位置,再解引用,正确;

C:正确;

D:*的优先级高,先解引用pa,取到的是首元素的值,+3就是首元素的值➕3,错误;

第三题

3. 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是()

A:函数调用可以作为独立的语句存在

B:函数调用可以作为一个函数的实参

C:函数调用可以出现在表达式中

D:函数调用可以作为一个函数的形参

答案及解析 D

A:函数的调用可以是独立的语句,比如我们实现的函数不需要返回值,只是完成一些特定的操作,如打印,交换,输入等等;

B:函数调用可以作为实参,但是必须有返回值的函数;

C:函数调用可以出现在表达式,也必须有返回值;

D:返回值存在寄存器中,没有地址,不能作为形参,但可以作为实参

第四题

4. 在32位的系统中,下面代码打印结果为()

union package 
{
    char head;
    int  body;
};
struct message 
{
    char id;
    int  crc;
    union package pack;
};
 
int main() 
{
    printf("size=%d\n",sizeof(struct message));
    return 0;
}

A:9

B:10

C:11

D:12

答案及解析 D

做错的直接来看我的这个博客C/C++内存对齐规则(结构体、联合体、类)-CSDN博客

第五题

5. 32位机器上,以下代码的输出是()

char c = -1;
int i0 = c;
int i1 = (unsigned char)c;
printf("%d, %d\n", i0, i1);

A:255,255

B:-1,-1

C:-1,255

D:255,-1

答案及解析 C 

这里考察的是char的取值范围是-127~128

而unsigned char是0~255

所以i0 = c,会有整型提升,也就是原来8个bit位的char类型,会提升位int类型,32的bit,高位补符号位;

11111111 111111111 11111111 11111111

而我们强制类型转换c位unsigned char 也就是不允许负数的存在了,所以-1的符号位,也就是数值位了。11111111就是255

i1 = (unsigned char)c,对于无符号的整型提升,高位补0

00000000 00000000 00000000 11111111

依旧是255;

你可能感兴趣的:(C语言选择题,开发语言,c语言)