c 高级面试题及答案.doc
c高级面试题及答案
一、单项选择题(每题2分,共10题)
1.以下哪种存储类别的变量存储在静态存储区?
A.autoB.registerC.staticD.extern
答案:C
2.关于指针,以下说法正确的是?
A.指针不能指向数组
B.指针可以进行加法运算
C.指针大小固定为4字节
D.空指针可以直接解引用
答案:B
3.函数指针的作用是?
A.指向函数的入口地址
B.调用函数
C.定义函数
D.作为函数参数
答案:A
4.以下哪个关键字用于声明常量?
A.constB.staticC.volatileD.register
答案:A
5.若有数组`inta[5]={1,2,3,4,5};`,则`a[5]`的值是?
A.5B.0C.不确定D.编译错误
答案:C
6.下面哪种情况会发生栈溢出?
A.函数正常调用返回
B.递归函数没有终止条件
C.变量定义过多
D.数组越界访问一次
答案:B
7.以下对结构体的描述错误的是?
A.结构体可以嵌套
B.结构体成员可以是不同类型
C.结构体变量不能整体赋值
D.可以定义结构体数组
答案:C
8.`typedef`的作用是?
A.定义新的数据类型
B.给已有的数据类型取别名
C.定义函数
D.定义常量
答案:B
9.关于`const`修饰指针,以下正确的是?
A.`constintp`表示指针指向的值不可变
B.`intconstp`表示指针本身不可变
C.`constintconstp`表示指针和指向的值都不可变
D.以上都对
答案:D
10.当函数内部的局部变量和全局变量同名时,函数内访问的是?
A.全局变量
B.局部变量
C.编译错误
D.运行时随机选择
答案:B
二、多项选择题(每题2分,共10题)
1.以下哪些是C语言中的预处理指令?
A.`include`B.`define`C.`ifdef`D.`else`
答案:ABCD
2.关于内存分配,以下说法正确的有?
A.`malloc`分配的内存需要`free`释放
B.`calloc`分配的内存会初始化为0
C.`realloc`可以调整已分配内存的大小
D.内存分配失败时函数会返回NULL
答案:ABCD
3.以下哪些属于C语言的数据类型?
A.`char`B.`float`C.`double`D.`long`
答案:ABCD
4.函数参数传递的方式有?
A.值传递B.地址传递C.引用传递D.指针传递
答案:ABD
5.以下哪些会导致程序出现未定义行为?
A.除0
B.访问越界的数组元素
C.释放已经释放的内存
D.未初始化的变量使用
答案:ABCD
6.关于结构体和共用体,正确的有?
A.结构体所有成员都有自己独立的内存空间
B.共用体所有成员共享同一内存空间
C.结构体变量大小是所有成员大小之和(考虑对齐)
D.共用体变量大小是最大成员的大小
答案:ABCD
7.以下哪些是C语言标准库函数?
A.`printf`B.`scanf`C.`strcpy`D.`malloc`
答案:ABCD
8.关于`volatile`关键字,正确的描述有?
A.防止编译器优化
B.用于修饰可能被异步修改的变量
C.可以提高程序执行效率
D.通常用于多线程或硬件相关场景
答案:ABD
9.以下哪些可以作为函数返回值类型?
A.基本数据类型B.指针类型C.结构体类型D.数组类型
答案:ABC
10.关于文件操作,正确的有?
A.`fopen`用于打开文件
B.`fclose`用于关闭文件
C.`fread`用于读取文件内容
D.`fwrite`用于写入文件内容
答案:ABCD
三、判断题(每题2分,共10题)
1.C语言中,数组名就是一个指针常量。()
答案:对
2.`goto`语句在C语言中是完全没有用的,应该避免使用。()
答案:错
3.函数内部定义的静态变量,在函数每次调用时都会重新初始化。()
答案:错
4.`sizeof`是一个运算符,不是函数。()
答案:对
5.指针相减的结果是指针所指向地址的差值。()
答案:错
6.一个源文件中定义的全局变量,在其他源文件中可以通过`extern`关键字声明后使用。()
答案:对
7.结构体变量可以作为函数