C语言入门必做踩坑题《篇四》

277 阅读2分钟

「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

第1题

🎗 若有定义: int a[ ] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24}, *q[4], k; 则下面的程序段输出的结果是 ( )

for(k=0; k<4; k++){ 
    q[k] = &a[k*3]; 
}
printf("%d\n",q[3][1]);

A. 18

B. 22

C. 20

D. 输出项不合法,结果不正确

📝 分析:

此题考查的是指针和数组的知识:

int* q[4]; q 是一个数组有4个元素,每个元素的类型是int*

在这里插入图片描述

所以选择 B 选项

第2题

🎗 test.c 文件中包括如下语句:则文件中定义的四个变量,哪个变量不是指针类型 ( )

#define INT_PTR int* 
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;

A. a

B. b

C. c

D. d

📝 分析:

此题虽然不难,但是有坑 🕳

    1️⃣ #define 定义的符号是完全替换的

在这里插入图片描述     2️⃣ typedef 是类型重命名

在这里插入图片描述

所以选择 B 选项

第3题

🎗 表达式 0x13&0x17, 0x13|0x17 的值分别是多少 ( )

A. 0x17 ; 0x13

B. 0x13 ; 0x17

C. 0xF8 ; 0xE8

D. 0xEc ; 0xC8

📝 分析:

此题考查的主要是进制之间的转换:

在这里插入图片描述 所以选择 B 选项

第4题

🎗 在 VS2013 下,这个结构体所占的空间大小是____字节

typedef struct
{ 
	int a;
	char b; 
	short c; 
	short d; 
}AA_t;

A. 16

B. 9

C. 12

D. 8

📝 分析:

对于结构体是如何计算大小有如下规则:

    ❗ 这个规则就是结构体内存对齐 ❕

▶ 第1个成员在与结构体变量偏移量为0的地址处

▶ 其它成员变量要对齐到某个数字 (对齐数) 的整数倍的地址处。对齐数 = 编译器默认的一个对齐数与该成员大小的较小值。VS中默认对齐数是8; Linux没有默认对齐数,它是按照自身大小来对齐的

▶ 结构体总大小为最大对齐数 (每个成员变量都有一个对齐数) 的整数倍

▶ 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍,结构体的整体大小就是所有最大对齐数 (含嵌套结构体的对齐数) 的整数倍

    ❗ 图示 ❕

在这里插入图片描述 所以选择 C 选项

第5题

🎗 若 int a = 10 ,则执行表达式 a += a *= a -= a/3 后 a 的值为

📝 分析:

❗ 影响表达式求值的有三个因素:❕

  1️⃣ 操作符的优先级

  2️⃣ 操作符的结合性 (优先级相同的情况下,结合性决定了运算顺序)

  3️⃣ 是否控制求值顺序 (比如 &&,如果左边为假,则整体为假)

⚠ 注意:

  N\A是无结合性

  L-R是从左向右

  R-L是从右向左

由此可见这里计算的顺序是:

在这里插入图片描述 在这里插入图片描述

所以 a 的值是 98