c语言笔试题大全,C语言面试题汇总(持续更)

笔者最近在找工作,因此对应聘C/C++嵌入式开发工程师容易被问到,或者经常搞不清楚的问题做一个汇总,也希望能对找工作的小伙伴起到帮助参考的作用。本篇集中于C语言方面的面试题目。

因为是自己总结的,可能会存在错误,还烦请各位读者批评指正。

一、变量内存分配

1.一个由C/C++编译的程序占用的内存分为以下几个部分:

①栈区—— 局部变量 —— 向低地址生长 —— 自动释放 —— 其操作方式类似于数据结构中的栈。

②堆区—— 向高地址生长 —— 手动分配、释放的存储区 —— malloc,free —— 它与数据结构中的堆是两回事,分配方式倒是类似于链表

③全局/静态存储区static—— 全局变量,静态变量,程序运行结束后自动释放

④常量存储区const—— 常量字符串储存在这里。储存在常量区的只读不可写。程序运行结束后自动释放

⑤代码区—— 存放函数体的二进制代码。

静态内存分配:编译时分配,包括:全局、静态全局、静态局部

动态内存分配:运行时分配:包括:栈(局部变量),堆(C语言常用到的变量被动态地分配到内存当中:malloc,calloc,realloc,free函数)

——> const修饰的全局变量也储存在常量区;

——>const修饰的局部变量依然在栈上。

int a = 0; //全局初始化区

char *p1; //全局未初始化区

main()

{

int b; //栈

char s[] = "abc"; //栈

char *p2; //栈

char *p3 = "123456"; //123456\0在常量区,p3在栈上。

static int c =0; //全局(静态)初始化区

p1 = (char *)malloc(10);

p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。

strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。

}

2. 存储类(内存管理):

①栈:局部变量,函数调用传参的过程。

②堆:动态存储区,需要程序员去申请释放

③数据段(data段):显式初始化仅非零的全局变量

3.static修饰的变量

(1)static修饰局部变量(静态局部变量)与普通局部变量相比:

① 静态局部变量作用域与连接属性,和普通局部变量一样

② 存储类:静态局部变量分配在data/bss段,普通局部变量在栈上

③ 生命周期:因为存储类的不同,静态局部变量生命周期变长了,直到程序结束

——所以当静

你可能感兴趣的:(c语言笔试题大全)