资源描述:
《面试中常见的C语言问题.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第一节C语言编程中的几个基本概念1.1#include<>与#include""1.#include<>和#include""有什么区别?这个题目考查大家的基础能力,#include<>用来包含开发环境提供的库,#include""用来包含.c/.cpp文件所在目录下的头文件。注意:有些开发环境可以在当前目录下面自动收索(包含子目录),有些开发环境需要指定明确的文件路径名。1.2switch()1.switch(c)语句中c可以是int,long,char,float,unsignedint类型?其实这个题目很基础,
2、c应该是整型或者可以隐式转换为整型的数据,很明显不能是实型(float、double)。所以这个命题是错误的。1.3const1.const有什么用途?虽然const很常用,但是我相信有很多人仍然答不上来。(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参
3、数,在函数内部不能改变其值;(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。1.4#ifndef/#define/#endif1.头文件中的#ifndef/#define/#endif干什么用?其实#ifndef、#define、#endif这些在u-boot、linux内核文件中经常见到,在这么大型的程序中大量使用,可见它的作用不可小觑。这些条件预编译多用于对代码的编译控制,增加
4、代码的可裁剪性,通过宏定义可以轻松的对代码进行裁剪。#ifndef/#define/#endif最主要的作用是防止头文件被重复定义。1.5全局变量和局部变量1.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。其实,由于计算机没有通用数据寄存器,则函数的参数、局部变量和返回值只能保存在堆栈中。提示:局部变量太大可能导致栈溢出,所以建议把较大数组放在main函数外,防止产生栈溢出。思考:如程序清单1.1所示。会出现怎样的情况?程序清单1.1大数组放在main函数中导致堆
5、栈溢出intmain(intargc,char*argv[]){intiArray[1024*1024];return0;}第二节数据存储与变量2.1变量的声明与定义1.如程序清单2.1所示会不会报错?为什么?如果不会报错,又是输出什么结果?程序清单2.1变量的声明与定义#includestaticinta;staticintb[];intmain(intargc,char*argv[]){printf("%d%d",a,b[0]);return0;}staticinta=8;staticint
6、b[4];这个程序是不会报错的,并且连警告都不会出现。输出的结果是:80staticinta,这句程序是声明全局变量a;staticintb[],这句程序是声明全局数组变量b,并且是不完全声明,也就是可以省略数组下标。staticinta=8,这里才是定义全局变量a,staticintb[4],这里是定义全局变量b。2.2局部变量与全局变量的较量1.请问如程序清单2.2所示输出什么?程序清单2.2局部变量与全局变量#includestaticinta=8;intmain(intargc,char*a
7、rgv[]){inta=4;printf("%d",a);return0;}C语言规定,局部变量在自己的可见范围内会“挡住”同名的全局变量,让同名的全局变量临时不可见。即在局部变量的可见范围内不能访问同名的全局变量。因此本程序输出为:4。2.3char、int、float、double的数据存储1.请问如程序清单2.3所示,i和j输出什么?程序清单2.3数据存储floati=3;intj=*(int*)(&i);printf("i=%f",i);printf("j=%#x",j);i是毋庸置疑是:3.00
8、0000。但是j呢?3.000000?答案是否定的,j是输出:0x40400000。有人会问了,难道j是随机输出?瞎说,j输出0x40400000是有依据,是一个定值!由于i是float数据类型,而j是int数据类型。理论上说,j是取了i的地址然后再去地址,应该得到的就是i的值:3。但是问题的关键就是float数据类型的存储方式和int数据类型