C语言经典面试题目分享 (不定期更新)

C语言面试易错题目分享

1、关键字static的作用是什么?

答:关键字static有三种作用:

(1). 在函数内部:将某一变量声明为静态变量,函数调用结束该变量内存也不会被释放,直到程序结束。

(2). 在函数外部(某个.c文件内):被该关键字声明过的变量可以被当前文件内的函数访问及使用,但是不能被其

它文件内的函数访问和使用。

(3). 修饰函数:一个被声明为静态的函数只能被这一文件内的其它函数调用,不能被其它文件的函数调用。

2、关键字const是什么含意?并说明以下声明代表什么含义?

const int a;
int const a;
const int *a;
int * const a;
int const * a const;

答:const可以简单理解为“只读”

前两种表示a是一个常整型数。第三种意味着a是一个指向常整型数的指针(整型数是不可修改,指针可以)。

第四种意思a是一个指向整型数的常指针(即指针指向的整型数是可以修改的,但指针是不可修改的)。

最后一种意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

3、全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

答 :全局变量储存在静态数据区,局部变量在堆栈中。

4、#include <<file.h>> 与 #include “file.h”的区别?

答:前者是从Standard Library的路径寻找和引用file.h,后者是从当前工作路径搜寻并引用file.h。

5、堆栈溢出一般是由什么原因导致的?

答 :1.资源申请太多,没有释放 2.递归调用的层次过多

6、队列和栈有什么区别?

答:队列先进先出,栈后进先出

7、哪种类型不能做switch()的参数类型

答 :switch的参数不能为实型。

8、局部变量能否和全局变量重名?如果重名会怎样?

答:能,局部会屏蔽全局。

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有

些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,

而那个局部变量的作用域就在那个循环体内

9、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答 、可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是只能有一个C文件中对变量赋初值。

10、语句for( ;1 ;)有什么问题?它是什么意思?

答 、无限循环。

11、do……while和while……do有什么区别?

答 、前一个循环一遍再判断,后一个判断以后再循环。

12、一个由C/C++编译的程序占用的内存可以划分为哪几个部分?
答:
(1)栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

(2)堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。

(3)全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全

局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块

区域。程序结束后由系统释放。

(4)文字常量区:常量字符串就是放在这里的。程序结束后由系统释放。

(5)程序代码区:存放函数体的二进制代码

举例说明:

int a=1; //全局初始化区
char *p1; //全局未初始化区
main()
{
	int b;//栈
	char s[]=”abc”; //栈
	char *p2; //栈
	char *p3=123456; //123456\0在常量区,p3在栈上。
	static int c=0//全局初始化区
	p1 = (char*)malloc(100);
	p2 = (char*)malloc(200); //分配得来得100和200字节的区域就在堆区。
	strcpy(p1,123456); //123456\0放在常量区
}

13、关键字volatile有什么含意 并给出三个不同的例子。

答:简单来说就是防止编译器优化,精确地说就是优化器在用到这个变量时必须每次都小心

地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

下面是volatile变量的几个例子:

(1). 并行设备的硬件寄存器(如:状态寄存器)

(2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

(3). 多线程应用中被几个任务共享的变量

14、结构与联合有和区别?
答:(1). 结构和联合都是由多个不同的数据类型成员组成, 但联合所有成员共用一块地址空

间, 联合中只存放了一个被选中的成员, 而结构的所有成员都存在,有自己独立的存储空间。

(2). 联合对其中某一成员赋值会导致其它成员值发生改变,结构对某一成员赋值不会对其它

成员造成影响。

15、简述数组与指针的区别?

答:指针可以随时指向任意类型的内存块。数组只能被创建在栈或是静态区。

16、用变量a给出下面的定义

a) 一个整型数

b) 一个指向整型数的指针

c) 一个指向指针的的指针,它指向的指针是指向一个整型数

d) 一个有10个整型数的数组

e) 一个有10个指针的数组,该指针是指向一个整型数的

f) 一个指向有10个整型数数组的指针

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

答:
a) int a; // An integer
b) int *a;
c) int **a; 
d) int a[10]; 
e) int *a[10];
f) int (*a)[10];
g) int (*a)(int);
h) int (*a[10])(int);

17、请写出下列代码的输出内容

#include
main()
{
	int a,b,c,d;
	a=10;
	b=a++;
	c=++a;
	d=10*a++;
	printf(“b,c,d:%d,%d,%d”,b,c,d);
	return 0;
}

答:10,12,120

18、交换两个变量的值,不使用第三个变量。

答:

有两种解法, 一种用算术算法, 一种用^(异或)

a = a + b;
b = a - b;
a = a - b;
or
a = a^b;// 只能对int,char..
b = a^b;
a = a^b;
or
a ^= b ^= a;

19、求以下结构大小分别为多少?

struct name1{
char str;
short x;
int num;
}struct name2{
char str;
int num;
short x;
}; 

求sizeof(name1)?

求sizeof(name2)?

答:sizeof(name1) = 8 sizeof(name2) = 12

20、(void )ptr 和((void))ptr 的结果是否相同?**

答:(void )ptr 和((void**))ptr 值是相同的

21、假设数组首地址为0x00000040、请写出以下程序输出结果.

#include <stdio.h>
int main(void)
{
    int a[5];
    printf("%p\n", a);
    printf("%p\n", a+1);
    printf("%p\n", &a);
    printf("%p\n", &a+1);
}

答:

第一个:数组名代表数组的首地址,所以是:0x00000040

第二个:a+1,即数组第二个元素的地址,也就是:0x00000044

第三个:首先数组名即表示数组首地址也表示数组第一个元素的地址,a=&a=&a[0],所以输

出0x00000040

第四个:因为&a是一个数组,被看成int(*)[5],所以数组地址+1就相当于加了整个数组的长

度所以输出0x00000034

22、请计算以下sizeof的值


char str[] = "hello";
char *p = str;
int n = 10;

sizeof(str);
sizeof(p);
sizeof(n);

答:6 4 4

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值