c语言面试题目100及最佳答案Word文档格式.docx
《c语言面试题目100及最佳答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《c语言面试题目100及最佳答案Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
100条经典C语言笔试题目
(2)请写出float
x
与“零值”比较的if
【标准答案】constfloatEPSINON=0.00001;
if((x>
=-EPSINON)&
&
(x<
=EPSINON)
不可将浮点变量用“==”或“!
=”与数字比较,应该设法
转化成“>
=”或“<
=”此类形式。
(3)请写出char
*p
语句
【标准答案】if(p==NULL)
if(p!
=NULL)
2、以下为Linux下的32位C程序,请计算sizeof的
值。
char
str[]=“Hello”;
*p=str;
int
n=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'
有什么错?
【标准答案】"
是字符串常量。
s是指针,指向这个
字符串常量,所以声明s的时候就有问题。
cosntchar*s="
然后又因为是常量,所以对是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);
}会出现什么问题?
【标准答案】程序崩溃,getmemory中的malloc不能返回
动态内存,free()对str操作很危险。
11、charszstr[10];
strcpy(szstr,"
0123456789"
产生什么结果?
为什么?
【标准答案】长度不一样,出现段错误。
12、数组和链表的区别?
【标准答案】数组:
数据顺序存储,固定大小;
链表:
数据可以随机存储,大小可动态改变
13、voidmain()
charaa[10];
printf(“%d”,strlen(aa));
会出现什么问题?
打印结果是是多少?
【标准答案】sizeof()和初不初始化,没有关系,
strlen()和初始化有关,打印结果值未知。
14、给定结构structA
chart:
4;
chark:
unsignedshorti:
8;
unsignedlongm;
};
问sizeof(A)=?
【标准答案】8
15、structname1{
charstr;
shortx;
intnum;
};
求sizeof(name1)?
16、structname2{
求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)();