和#include""有什么区别?这个题目考查大家的基础能力,#include<>用来包含开发环境提供的库,#include""用来包含"> 和#include""有什么区别?这个题目考查大家的基础能力,#include<>用来包含开发环境提供的库,#include""用来包含" />
面试中常见的c语言问题

面试中常见的c语言问题

ID:32721470

大小:797.80 KB

页数:137页

时间:2019-02-15

面试中常见的c语言问题_第1页
面试中常见的c语言问题_第2页
面试中常见的c语言问题_第3页
面试中常见的c语言问题_第4页
面试中常见的c语言问题_第5页
资源描述:

《面试中常见的c语言问题》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第一节C语言编程中的几个基本概念1.1#include<>与#include""1.#include<>和#include""有什么区别?这个题目考查大家的基础能力,#include<>用来包含开发环境提供的库,#include""用来包含.c/.cpp文件所在目录下的头文件。注意:有些开发环境可以在当前目录下面自动收索(包含子目录),有些开发环境需要指定明确的文件路径名。1.2switch()1.switch(c)语句中c可以是int,long,char,float,unsignedint类型?其实这个题目很基础,c应该是整型或者可以隐式转换为整型的数

2、据,很明显不能是实型(float、double)。所以这个命题是错误的。1.3const1.const有什么用途?虽然const很常用,但是我相信有很多人仍然答不上来。(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;(4)对于类的成员函数,若指定其为const类型

3、,则表明其是一个常函数,不能修改类的成员变量;(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。1.4#ifndef/#define/#endif1.头文件中的#ifndef/#define/#endif干什么用?其实#ifndef、#define、#endif这些在u-boot、linux内核文件中经常见到,在这么大型的程序中大量使用,可见它的作用不可小觑。这些条件预编译多用于对代码的编译控制,增加代码的可裁剪性,通过宏定义可以轻松的对代码进行裁剪。#ifndef/#define/#endif最主要的作用是防止

4、头文件被重复定义。1.5全局变量和局部变量1.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。其实,由于计算机没有通用数据寄存器,则函数的参数、局部变量和返回值只能保存在堆栈中。提示:局部变量太大可能导致栈溢出,所以建议把较大数组放在main函数外,防止产生栈溢出。思考:如程序清单1.1所示。会出现怎样的情况?程序清单1.1大数组放在main函数中导致堆栈溢出intmain(intargc,char*argv[]){intiArray[1024*1024];return0;}第二节数据存储与变量2.1变

5、量的声明与定义1.如程序清单2.1所示会不会报错?为什么?如果不会报错,又是输出什么结果?程序清单2.1变量的声明与定义#includestaticinta;staticintb[];intmain(intargc,char*argv[]){printf("%d%d",a,b[0]);return0;}staticinta=8;staticintb[4];这个程序是不会报错的,并且连警告都不会出现。输出的结果是:80staticinta,这句程序是声明全局变量a;staticintb[],这句程序是声明全局数组变量b,并且是不完全声

6、明,也就是可以省略数组下标。staticinta=8,这里才是定义全局变量a,staticintb[4],这里是定义全局变量b。2.2局部变量与全局变量的较量1.请问如程序清单2.2所示输出什么?程序清单2.2局部变量与全局变量#includestaticinta=8;intmain(intargc,char*argv[]){inta=4;printf("%d",a);return0;}C语言规定,局部变量在自己的可见范围内会“挡住”同名的全局变量,让同名的全局变量临时不可见。即在局部变量的可见范围内不能访问同名的全局变量。因此本程

7、序输出为: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.000000。但是j呢?3.000000?答案是否定的,j是输出:0x40400000。有人会问了,难道j是随机输出?瞎说,j输出0x40400000是有依据,是一个定值!由于i是float数据类型,而j是int数据类型。理论上说,j是取了i的地址然后再去地址,应该得到

8、的就是i的值:3。但是问题的关键就是float数据类型的存储方式和int数据类型

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。