C语言经典面试题目集锦
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.前言
2.声明和初始化
2.1我如何决定使用那种整数类型?
2.264位机上的64位类型是什么样的?
2.3怎样定义和声明全局变量和函数最好?
2.4extern在函数声明中是什么意思?
2.5关键字auto到底有什么用途?
2.6我似乎不能成功定义一个链表。我试过typedef struct{char*item;NODEPTR next;}*NODEPTR;但是编译器报了错误信息。难道在C语言中一个结构不能包含指向自己的指针吗?
2.7怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组?
2.8函数只定义了一次,调用了一次,但编译器提示非法重定义了。
2.9main()的正确定义是什么?void main()正确吗?
2.10对于没有初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为``零",它可否作为空指针或浮点零?
2.11代码int f(){char a[]="Hello,world!";}不能编译。
2.12这样的初始化有什么问题?char*p=malloc(10);编译器提示``非法初始式"云云。
2.13以下的初始化有什么区别?char a[]="string literal";char*p="string literal";当我向p[i]赋值的时候,我的程序崩溃了。
2.14我总算弄清除函数指针的声明方法了,但怎样才能初始化呢?
3.结构、联合和枚举
3.1声明struct x1{...};和typedef struct{...}x2;有什么不同?
3.2为什么struct x{...};x thestruct;不对?
3.3一个结构可以包含指向自己的指针吗?
3.4在C语言中实现抽象数据类型什么方法最好?
3.5在C中是否有模拟继承等面向对象程序设计特性的好方法?
3.6我遇到这样声明结构的代码:struct name{int namelen;char namestr[1];};然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素。这样合法和可移植吗?
3.7是否有自动比较结构的方法?
3.8如何向接受结构参数的函数传入常数值?
3.9怎样从/向数据文件读/写结构?
3.10我的编译器在结构中留下了空洞,这导致空间浪费而且无法与外部数据文件进行"二进制"读写。能否关掉填充,或者控制结构域的对齐方式?
3.11为什么sizeof返回的值大于结构的期望值,是不是尾部有填充?
3.12如何确定域在结构中的字节偏移?
3.13怎样在运行时用名字访问结构中的域?
3.14程序运行正确,但退出时却``core dump''了,怎么回事?
3.15可以初始化一个联合吗?
3.16枚举和一组预处理的#define有什么不同?
3.17有什么容易的显示枚举值符号的方法?
4.表达式
4.1为什么这样的代码:a[i]=i++;不能工作?
4.2使用我的编译器,下面的代码int i=7;printf("%d\n",i++*i++);返回49?不管按什么顺序计算,难道不该打印出56吗?
4.3对于代码int i=3;i=i++;不同编译器给出不同的结果,有的为3,有的为4,哪个是正确的?
4.4这是个巧妙的表达式:a^=b^=a^=b它不需要临时变量就可以交换a和b的值。
4.5我可否用括号来强制执行我所需要的计算顺序?
4.6可是&&和||运算符呢?我看到过类似while((c=getchar())!=EOF&&c!='\n')的代码……
4.7我怎样才能理解复杂表达式?``序列点"是什么?
4.8那么,对于a[i]=i++;我们不知道a[]的哪一个分量会被改写,但i的确会增加1,对吗?
4.9++i和i++有什么区别?
4.10如果我不使用表达式的值,我应该用++i或i++来自增一个变量吗?
4.11为什么如下的代码int a=100,b=100;long int c=a*b;不能工作?4.12我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下边这样的代码吗?((condition)?a:b)=complicated_expression;
5.指针
5.1我想声明一个指针并为它分配一些空间,但却不行。这些代码有什么问题?char*p;*p=malloc(10);
5.2*p++自增p还是p所指向的变量?
5.3我有一个char*型指针正巧指向一些int型变量,我想跳过它们。为什么如下的代码((int*)p)++;不行?
5.4我有个函数,它应该接受并初始化一个指针void f(int*ip){static int dummy=5;ip=&dummy;}但是当我如下调用时:int*ip;f(ip);调用者的指针却没有任何变化。
5.5我能否用void**指针作为参数,使函数按引用接受一般指针?
5.6我有一个函数extern int f(int*);它接受指向int型的指针。我怎样用引用方式传入一个常数?下面这样的调用f(&5);似乎不行。
5.7C有``按引用传递"吗?
5.8我看到了用指针调用函数的不同语法形式。到底怎么回事?
5.9我怎样把一个int变量转换为char*型?我试了类型转换,但是不行。
6.空(null)指针
6.1臭名昭著的空指针到底是什么?
6.2怎样在程序里获得一个空指针?
6.3用缩写的指针比较``if(p)"检查空指针是否可靠?如果空指针的内部表达不