第一题
1. int a[10] = {2,3,5}, 请问a[3]及a[3]之后的数值是()
A:不确定的数据
B:5
C:0
D:0xf f f f f f f f
答案及解析 C
数组的不完全初始化,会自动把没初始化的部分初始化为0;
第二题
2. 引用标准库时,下面的说法正确的是()
A:语句#include “stdlib.h”是正确的,而且程序编译速度比#include< stdlib.h >要快
B:语句#include< stdlib.h >是正确的,而且程序编译速度比#include “stdlib.h”要快
C:语句#include< stdlib.h >和#include “stdlib.h”都是正确的,程序编译速度没有区别
D:语句#include “stdlib.h”是错误的
答案及解析 B
#include "" 是先在当前的工作目录上去找" "里面的头文件,若没找到,再去标准库去找;
#include <>则是先去标准库去找,找不到再去当前工作目录;
所以stdlib.h 是一个C标准库里面的头文件,所以<stdlib.h>一定更快;
第三题
3. 在32位机器上,有如下代码:输出结果为()
#include <stdio.h> void func0() { char array[] = "abcdefg"; printf("%d ", sizeof(array)); const char *p = "abcdefg"; printf("%d ", sizeof(p)); } void func1(char p[10]) { printf("%d ", sizeof(p)); } int main() { char p[10] = "hello"; func0(); func1(p); printf("%d ", sizeof(char[2])); return 0; }
A:8 4 4 2
B:4 4 4 4
C:8 8 4 2
D:8 4 4 1
答案及解析 A
func0里面
第一个输出 :sizeof数组名表示的是整个数组的大小,但是别忘了一个隐藏的\0,所以为8;
第二个输出:sizeof(p),p是一个指针类型,32位下是4字节,所以为4;
func1这里
第三个输出:传入的是一个数组名,所以数组在传参的时候会退化成指针类型,p其实是一个指针类型,char *类型,sizeof(p),依旧是4字节;
第四个输出:sizeof(char [2])这里的char [2]其实是一个数据类型,表示的是一个char数组,有两个元素,所以为2字节;
答案就是8442;
第四题
4. 以下程序的运行结果是()
#include <stdio.h> #define MIN(x,y) (x)<(y) ? (x):(y) int main() { int i = 10, j = 15, k; k = 10*MIN(i, j); printf ("%d\n", k); }
A:10
B:15
C:100
D:150
答案及解析 B
本题考查#define的替换和运算符优先级
k = 10 * MIN(i, j) = 10 * (x) < (y) ? (x) : (y) = 10 * 10 < 15 ? 10 : 15
*的优先级高于条件操作符
所以 k = 100 < 15 ? 10 : 15 = 15;
第五题
5. 32位系统下下面程序的输出结果为多少?
#include <stdio.h> void Func(char str_arg[100]) { printf("%d\n", sizeof(str_arg)); } int main() { char str[] = "Hello"; printf("%d\n", sizeof(str)); printf("%d\n", strlen(str)); char*p = str; printf("%d\n", sizeof(p)); Func(str); }
A:5 5 4 4
B:6 5 4 4
C:6 5 6 4
D:5 5 5 100
答案及解析 B
前两个就不解释了,分别为6,5;因为有隐藏的\0,sizeof算,strlen不算
第三个,p是指针类型,sizeof(p)是算的指针类型,32位下指针类型4字节
第四个,这里要知道数组在传参的时候,会转换成指针,所以str_arg是一个指针类型,依旧位4;