第一题
3. 假定有语句“ int b[10], *pb; ”,则不正确的赋值为 ( )
A:pb=b
B:pb=b[5]
C:pb=b+2
D:pb=&b[0]
答案及解析 B
本题考查的是指针类型对数组的引用;
A:b是数组名,是首元素地址,数据类型是int *,数据类型匹配,赋值正确;
B:b[5]是数组的一个元素,数据类型是int,数据类型不匹配,赋值错误;
C:b是数组名,首元素的地址,b + 2;就是往后移动2个int类型的大小,也就是8字节,到达的是第三个元素的地址,相当于&b[3],所以数据类型是int*,正确;
D:&b[0],数据类型是int*,数据类型匹配,正确;
第二题
2. 运行时的C程序,下列哪些变量在内存中的stack(栈)区域的有()
int a = 0; char *p1; int main() { int b; char s[] = "abc"; char *p2; char *p3 = "123456"; static int c =0; p1 = (char *)malloc(10); free(p1); return 0; }
A:a
B:b
C:c
D:s
E:p1
F:p2
答案及解析 BDF
stack是栈空间的意思,我们学习数据结构就知道了;而这里考察的是内存中栈中存放的是哪些数据?栈中存放的是局部变量的空间;
a 和p1 :这是一个全局变量,存放在静态区;
b,s,p2,p3:这些都是局部定义的变量,存放的就是栈区
static的变量:是静态变量,存在静态区;
由malloc开辟的空间:存放的是堆区;
第三题
3. 以下程序的运行结果是()
#include <stdio.h> int main() { int m = 12,n = 34; printf("%d %d ", m++, ++n); printf("%d %d\n", n++, ++m); }
A:12 35 35 14
B:12 35 35 13
C:12 34 35 14
D:12 34 35 13
答案及解析 A
本题依旧考察的是前置++和后置++;
记住前置++的表达式,表达式的值是++之后的值;
后置++的表达式,表达式的值是++之前的值;
--也是一个道理
第四题
4. 若有以下程序
#include <stdio.h> int main() { int s = 0, n; for (n = 0; n < 4; n++) { switch (n) { default: s += 4; case 1: s += 1; case 2: s += 2; case 3: s += 3; } } printf("%d\n", s); return 0; }
则程序的输出结果是?
A:6
B:18
C:10
D:24
答案及解析 D
本题考查的是switch语句,只要case和default语句后面没有break,就会依次执行下面每一个case或default的语句;
比如第一次循环,n=0,只满足default,而他们都没有break,所以依次执行下面的语句
s += 4,s += 1,s += 2,s += 3;
剩下的循环以此类推;
第五题
5. 下面函数输出结果是()
#include <stdio.h> int main() { int k = 12345; printf("%2d\n", k); return 0; }
A:12
B:45
C:12345
D:无法通过编译
答案及解析 C
本题考查的是格式化打印
直接看这篇博客:%md在printf语句和scanf语句中的区别-CSDN博客