c语言面试题目100及最佳答案.docx
- 文档编号:3020875
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:42
- 大小:31.66KB
c语言面试题目100及最佳答案.docx
《c语言面试题目100及最佳答案.docx》由会员分享,可在线阅读,更多相关《c语言面试题目100及最佳答案.docx(42页珍藏版)》请在冰豆网上搜索。
c语言面试题目100及最佳答案
c语言面试题目100及最佳答案
1、请填写bool,float,指针变量与“零值”比较的if
语句。
提示:
这里“零值”可以是0,0.0,FALSE或者“空指针”
。
例如int变量n与“零值”比较的if语句为:
if(n==0)
if(n!
=0)
以此类推。
(1)请写出boolflag与“零值”比较的if语句:
【标准答案】if(flag)if(!
flag)
100条经典C语言笔试题目
(2)请写出floatx与“零值”比较的if语句:
【标准答案】constfloatEPSINON=0.00001;
if((x>=-EPSINON)&&(x<=EPSINON)
不可将浮点变量用“==”或“!
=”与数字比较,应该设法
转化成“>=”或“<=”此类形式。
100条经典C语言笔试题目
(3)请写出char*p与“零值”比较的if语句
【标准答案】if(p==NULL)if(p!
=NULL)
2、以下为Linux下的32位C程序,请计算sizeof的
值。
charstr[]=“Hello”;
char*p=str;
intn=10;
请计算
(1)sizeof(str)=
(2)sizeof(p)=
(3)sizeof(n)=
【标准答案】
(1)6、
(2)4、(3)4
(4)voidFunc(charstr[100])
{
……;
}
请计算sizeof(str)=
(5)void*p=malloc(100);
请计算sizeof(p)=
【标准答案】(4)4、(5)4
4、用变量a给出下面的定义
e)一个有10个指针的数组,该指针是指向一个整型数
的;
f)一个指向有10个整型数数组的指针;
g)一个指向函数的指针,该函数有一个整型参数并返
回一个整型数;
h)一个有10个指针的数组,该指针指向一个函数,该
函数有一个整型参数并返回一个整型数;
【标准答案】e)int*a[10];f)int(*a)[10]
g)int(*a)(int);h)int(*a[10])(int)
5、设有以下说明和定义:
typedefunion{longi;intk[5];charc;}DATE;
structdata{intcat;DATEcow;doubledog;}too;
DATEmax;
则语句printf("%d",sizeof(structdate)+sizeof(max));的
执行结果是:
_____
【标准答案】DATE是一个union,变量公用空间.里面最
大的变量类型是int[5],占用20个字节.所以它的大小是
20
data是一个struct,每个变量分开占用空间.依次为int4+
DATE20+double8=32.
所以结果是20+32=52.
当然...在某些16位编辑器下,int可能是2字节,那么结果
是int2+DATE10+double8=20
6、请问以下代码有什么问题:
intmain()
{
chara;
char*str=&a;
strcpy(str,"hello");
printf(str);
return0;
}
【标准答案】没有为str分配内存空间,将会发生异常
问题出在将一个字符串复制进一个字符变量指针所指
地址。
虽然可以正确输出结果,但因为越界进行内在
读写而导致程序崩溃。
7、请问以下代码有什么问题:
char*s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
【标准答案】"AAA"是字符串常量。
s是指针,指向这个
字符串常量,所以声明s的时候就有问题。
cosntchar*s="AAA";
然后又因为是常量,所以对是s[0]的赋值操作是不合法
的。
8、int(*s[10])(int)表示的是什么啊
【标准答案】int(*s[10])(int)函数指针数组,每个指针
指向一个intfunc(intparam)的函数。
9、c和c++中的struct有什么不同?
【标准答案】c和c++中struct的主要区别是c中的struct
不可以含有成员函数,而c++中的struct可以。
c++中
struct和class的主要区别在于默认的存取权限不同,
struct默认为public,而class默认为private
10、voidgetmemory(char*p)
{
p=(char*)malloc(100);
strcpy(p,“helloworld”);
}
intmain()
{
char*str=NULL;
getmemory(str);
printf(“%s/n”,str);
free(str);
return0;
}会出现什么问题?
【标准答案】程序崩溃,getmemory中的malloc不能返回
动态内存,free()对str操作很危险。
11、charszstr[10];
strcpy(szstr,"0123456789");
产生什么结果?
为什么?
【标准答案】长度不一样,出现段错误。
100条经典C语言笔试题目
12、数组和链表的区别?
【标准答案】数组:
数据顺序存储,固定大小;
链表:
数据可以随机存储,大小可动态改变
13、voidmain()
{
charaa[10];
printf(“%d”,strlen(aa));
}
会出现什么问题?
打印结果是是多少?
【标准答案】sizeof()和初不初始化,没有关系,
strlen()和初始化有关,打印结果值未知。
14、给定结构structA
{
chart:
4;
chark:
4;
unsignedshorti:
8;
unsignedlongm;
};问sizeof(A)=?
【标准答案】8
15、structname1{
charstr;
shortx;
intnum;
};求sizeof(name1)?
【标准答案】8
16、structname2{
charstr;
intnum;
shortx;
};求sizeof(name2)?
【标准答案】12
17、程序哪里有错误
wap(int*p1,int*p2)
{
int*p;
*p=*p1;
*p1=*p2;
*p2=*p;
}
【标准答案】p为野指针(指向一个已删除的对象或未申请访问受限内存区域的指针)
19、(void*)ptr和(*(void**))ptr的结果是否相同?
其
中ptr为同一个指针。
【标准答案】(void*)ptr和(*(void**))ptr值是相同的
20、要对绝对地址0x100000赋值,我们可以用
(unsignedint*)0x100000=1234;
那么要是想让程序跳转到绝对地址是0x100000去执行
,应该怎么做?
【标准答案】*((void(*)())0x100000)();
首先要将0x100000强制转换成函数指针,即:
(void(*)())0x100000
然后再调用它:
*((void(*)())0x100000)();
22、关于内存的思考题
(1)你能看出有什么问题?
23、关于内存的思考题
(2)你能看出有什么问题?
25、关于内存的思考题(3)你能看出有什么问题?
26、关于内存的思考题(4)你能看出有什么问题?
27、关键字volatile有什么含意?
并给出三个不同的例
子。
【参考答案】一个定义为volatile的变量是说这变量可
能会被意想不到地改变,这样,编译器就不会去假设
这个变量的值了。
精确地说就是,优化器在用到这个
变量时必须每次都小心地重新读取这个变量的值,而
不是使用保存在寄存器里的备份。
下面是volatile变量
的几个例子:
1).并行设备的硬件寄存器(如:
状态寄存器)
2).一个中断服务子程序中会访问到的非自动变量
(Non-automaticvariables)
3).多线程应用中被几个任务共享的变量
28、嵌入式系统经常具有要求程序员去访问某特定的
内存位置的特点。
在某工程中,要求设置一绝对地址
为0x67a9的整型变量的值为0xaa66。
编译器是一个纯
粹的ANSI编译器。
写代码去完成这一任务。
【参考答案】这一问题测试你是否知道为了访问一绝对
地址把一个整型数强制转换(typecast)为一指针是合
法的。
这一问题的实现方式随着个人风格不同而不同
。
典型的类似代码如下:
int*ptr;
ptr=(int*)0x67a9;
*ptr=0xaa55;
29、头文件中的ifndef/define/endif干什么用?
【标准答案】防止该头文件被重复引用。
30、#include
“filename.h”有什么区别?
【标准答案】对于#include
标准库路径开始搜索filename.h;
对于#include“filename.h”,编译器从用户的工作路
径开始搜索filename.h。
31、const有什么用途?
(请至少说明两种)
【标准答案】:
(1)可以定义const常量
(2)const可以修饰函数的参数、返回值,甚至函数
的定义体。
被const修饰的东西都受到强制保护,可
以预防意外的变动,能提高程序的健壮性。
32、static有什么用途?
(请至少说明两种)
【标准答案】
1.限制变量的作用域(static全局变量);
2.设置变量的存储域(static局部变量)。
33、堆栈溢出一般是由什么原因导致的?
【标准答案】没有回收垃圾资源。
34、如何引用一个已经定义过的全局变量?
【标准答案】可以用引用头文件的方式,也可以用
extern关键字,如果用引用头文件方式来引用某个在
头文件中声明的全局变理,假定你将那个变量写错了
,那么在编译期间会报错,如果你用extern方式引用
时,假定你犯了同样的错误,那么在编译期间不会报
错,而在连接期间报错。
35、全局变量可不可以定义在可被多个.C文件包含的
头文件中?
为什么?
【标准答案】可以,在不同的C文件中以static形式来声
明同名全局变量。
可以在不同的C文件中声明同名的全
局变量,前提是其中只能有一个C文件中对此变量赋初
值,此时连接不会出错。
36、队列和栈有什么区别?
【标准答案】队列先进先出,栈后进先
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 面试 题目 100 最佳答案