小学习|C语言经典面试题10道(一)

1、请填写bool , float, 指针变量 与“零值”比较的if语句。提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。例如int 变量 n 与“零值”比较的 if 语句为:if ( n = =0 ) if ( n != 0 ) 以此类推。 (1)请写出bool flag 与“零值”比较的if 语句。
答案:if ( flag ) ;if ( !flag )
(2)请写出float x 与“零值”比较的if 语句。
答案:const float EPSINON = 0.00001、if ((x >= - EPSINON) && (x <= EPSINON))。详解:不可将浮点变量用“ == ” 或“!=” 与数字比较,应该设法转化成“>=” 或“<=” 此类形式。
(3)请写出char *p 与“零值”比较的if 语句。
答案:if(p= =NULL) ; if(p!=NULL)
2.以下为Linux下的32 位C 程序,请计算sizeof 的值。
char str[] = “Hello” ;
char *p = str ;
int n = 10;
请计算
1、sizeof ( str ) =
2、sizeof ( p ) =
3、sizeof ( n ) =
4、void Func ( char str[100]) {…… ; },请计算sizeof( str ) =____
5、void *p=malloc(100); sizeof( p )=
答案:
(1)sizeof(str)=6
(2) sizeof( p)=4
(3) sizeof(n)=4
(4) sizeof(str)=4
(5) sizeof( p)=4
详解:“Hello”中隐藏一个’\0’字符串结束符,32位程序内指针(即地址)也是32位,数组作为参数传入函数内,其实传入的是首地址,所以还是求的指针(即地址)大小。
3.用变量a 给出下面的定义
1:一个有10个指针的数组,该指针是指向一个整型数的;
2:一个指向有10个整型数数组的指针;
3: 一个指向函数的指针,该函数有一个整型参数并返回一个整型数;
4:一个有10个指针的数组,每个指针指向一个函数,该函数有一个整型参数并返回一个整型数;
答案:
1:int * a[10];
2:int (*a)[10];
3:int (*a)(int);
4:int (*a[10])(int)
4.设有以下说明和定义:
typedef union {
long i;
int k[5];
char c;
} DATE;
struct data {
int cat;
DATE cow;
double dog;
} too;
DATE max;
则语句printf("%d",sizeof(struct data)+sizeof(max)); 的执行结果是:_____
答案:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20,data 是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是20 + 32 = 52.
当然… 在某些16位编辑器下, int 可能是2字节,那么结果是int2 + DATE10 + double8 = 20
5.请问以下代码有什么问题:
int main()
{
char a;
char *str=& a;
strcpy(str,"hello");
printf(str);
return 0;
}
答案:没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
6.请问以下代码有什么问题:
char * s ="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
答案:“AAA” 是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。cosnt char * s =“AAA”; 然后又因为是常量,所以对是s[0] 的赋值操作是不合法的。
7.int (*s[10])(int) 表示的是什么 答案:int (*s[10])(int) 函数指针数组,每个指针指向一个int func ( int param) 的函数。(或一个有10个指针的数组,每个指针指向一个函数,该函数有一个整型参数并返回一个整型数)
8.c和c++ 中的struct有什么不同? 答案:c和c++ 中struct的主要区别是c中的struct不可以含有成员函数,而c++ 中的struct可以。c++ 中struct和class的主要区别在于默认的存取权限不同,struct默认为public ,而class默认为private
9.void getmemory(char *p) {
p=(char *) malloc(100);
strcpy(p,“hello world”);
}
int main( ) {
char *str=NULL;
getmemory(str);
printf(“%s/n”,str);
free(str);
return 0;
} 会出现什么问题?
答案:程序崩溃,getmemory中的malloc 不能传递动态内存,所以str一直是NULL,free ()对str操作很危险。

10. char szstr[10];
strcpy(szstr,"0123456789");
产生什么结果?为什么?
【小学习|C语言经典面试题10道(一)】
答案:长度不一样,出现段错误。字符串多一个’\0’结束符。

    推荐阅读