第一题
- 假定有语句" int b[10], *pb; ",则不正确的赋值为 ( )
A:pb=bB: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*,数据类型匹配,正确;
第二题
- 运行时的C程序,下列哪些变量在内存中的stack(栈)区域的有()
cpp
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开辟的空间:存放的是堆区;
第三题
- 以下程序的运行结果是()
cpp
#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
本题依旧考察的是前置++和后置++;
记住前置++的表达式,表达式的值是++之后的值;
后置++的表达式,表达式的值是++之前的值;
--也是一个道理
第四题
- 若有以下程序
cpp
#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:6B:18
C:10
D:24
答案及解析 D
本题考查的是switch语句,只要case和default语句后面没有break,就会依次执行下面每一个case或default的语句;
比如第一次循环,n=0,只满足default,而他们都没有break,所以依次执行下面的语句
s += 4,s += 1,s += 2,s += 3;
剩下的循环以此类推;
第五题
- 下面函数输出结果是()
cpp
#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博客