C语言经典面试题:
1.可以做switch()的参数类型是:
答:只能是int和char型。
2.写出float X与零值比较的if语句
答:if(x>-0.000001&x<0.000001)
3.C语言中将一个字符转换成整数的函数是哪个?写出这个函数的原型
答:函数:atol()
功能:把字符串转换成长整型
原型:long atol(const char *nptr)
示例:
#include<stdio.h>
int main()
{
long lNum=0;
char *str="12345";
lNum=atol(str);
printf("String=%s integer=%d\n",str,lNum);
return 0;
}
4.unsigned char *p1=(unsigned char *)0x801000;
unsigned long *p2=(unsigned long *)0x810000;
p1+5=?,p2+5=?
答:p1+5=0x801005,p2+5=0x810014;
5.求值:int aNum=5,bNum=0;
bNum=(aNum++)(aNum++);
aNum=?,bNum=?
答:aNum=7,bNum=25
6 一16位整数1101010110110111,每四位为一个整数,写函数求值
答:char sumFunc(unsigned short num)
{
char ch=0;
int iCount=4;
do{
c+=n&15;
n>>4;
}(while--i);
return 0;
}
7.编程实现两个字符串s和t,把t字符串拼接到s字符串尾,s字符串有足够的空间存放t字符串
void strConnect(char *s,char *t,int n)
{
char *p=s;
char *q=t;
if(q==NULL)
return;
while(*p!=‘\0‘)
p++;
while(*q!=‘\0‘)
{
*p=*q;
p++;
q++;
}
*p=‘\0‘;
}
void main()
{
char cArray1[10]="abcde";
char cArray2[3]="xyz";
strConnect(cArray1,cArray2,3);
printf("%s",cArray1);
}
8.static全局变量与普通全局变量的区别,static局部变量与普通局部变量的区别,static函数与普通函数的区别。
答:1.非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,而静态全局变量(只初始化一次)限制了其作用域,只在定义该变量的源文件内有效,同一源程序的其它源文件都不能使用它。
2.static局部变量(只初始化一次)存储在静态区,普通局部变量存储在栈中,存储方式不同。
3.static函数在内存中只有一份,普通函数在每个被调用中都维持一份拷贝。
9.char a;
char *str=&a;
strcpy(str,"hello");
问这段代码有什么问题?
答:没有为str分配内存空间,将会发生异常,将一个字符串复制进一个字符变量指针所指指针,虽然可以正确输出结果,但因为越界进行内在读写导致程序崩溃。