您好,欢迎来到九壹网。
搜索
您的当前位置:首页c语言面试题目100及最佳答案

c语言面试题目100及最佳答案

来源:九壹网
c语言面试题目和答案

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 ) 100 条经典 C语言笔试题目

(2)请写出float x 与“零值”比较的if 语句:

【标准答案】 const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮点变量用“==” 或“!=” 与数字比较,应该设法 转化成“>=” 或“<=” 此类形式。 100 条经典 C语言笔试题目

(3)请写出char *p 与“零值”比较的if 语句 【标准答案】 if (p == NULL) if (p != NULL)

2、以下为Linux下的32 位C 程序,请计算sizeof 的 值。

char str[] = “Hello” ; char *p = str ; i nt n = 10; 请计算

(1)sizeof (str ) = (3)sizeof ( n ) =

【标准答案】

(1)6、(2)4 、(3 )4

(4)void Func ( char str[100]) { …… ; } 请计算sizeof( str ) = (5)void * p = malloc( 100 ); 请计算sizeof ( p ) = 【标准答案】(4)4、(5)4

2)s i zeof ( p ) =

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、设有以下说明和定义:

typedef u nion {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too; DATE max;

则语句printf(\"%d\的 执行结果是:_____

【标准答案】DATE是一个union, 变量公用空间. 里面最 大的变量类型是int[5], 占用20个字节. 所以它的大小是 20

data 是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 所以结果是20 + 32 = 52.

当然... 在某些16位编辑器下, int 可能是2字节,那么结果 是int2 + DATE10 + double8 = 20

6、请问以下代码有什么问题: int main() { char a; char *str=&a; strcpy(str,\"hello\"); printf(str); return 0; }

【标准答案】没有为str分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指

地址。虽然可以正确输出结果,但因为越界进行内在 读写而导致程序崩溃。

7、请问以下代码有什么问题: char* s=\"AAA\"; printf(\"%s\s[0]='B'; printf(\"%s\有什么错?

【标准答案】\"AAA\" 是字符串常量。s是指针,指向这个 字符串常量,所以声明s的时候就有问题。 cosnt char* s=\"AAA\";

然后又因为是常量,所以对是s[0] 的赋值操作是不合法 的。

8、int (*s[10])(int) 表示的是什么啊

【标准答案】int (*s[10])(int) 函数指针数组,每个指针 指向一个int func(intp aram) 的函数。

9、c和c++ 中的struct有什么不同?

【标准答案】c和c++ 中struct的主要区别是c中的struct 不可以含有成员函数,而c++ 中的struct可以。c++ 中 struct和class的主要区别在于默认的存取权限不同, struct默认为public ,而class默认为private

10、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 不能返回 动态内存,free ()对str操作很危险。

11、char szstr[10];

strcpy(szstr,\"01234567\"); 产生什么结果?为什么?

【标准答案】长度不一样,出现段错误。 100 条经典 C语言笔试题目 12、数组和链表的区别?

【标准答案】数组:数据顺序存储,固定大小;

链表:数据可以随机存储,大小可动态改变

13、void main() {

char aa[10];

printf(“%d”,strlen(aa));

} 会出现什么问题?打印结果是是多少?

【标准答案】sizeof()和初不初始化,没有关系, strlen()和初始化有关,打印结果值未知。

14、给定结构struct A { char t:4; char k:4;

unsigned short i:8; unsigned long m; }; 问sizeof(A) = ? 【标准答案】8

15、struct name1{ char str; short x; int num;

} ;求sizeof(name1)? 【标准答案】8

16、struct name2{ char str; int num; short x;

}; 求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赋值,我们可以用 (unsigned int*)0x100000 = 1234;

那么要是想让程序跳转到绝对地址是0x100000去执行 ,应该怎么做?

【标准答案】*((void (*)( ))0x100000 ) ( ); 首先要将0x100000强制转换成函数指针,即: (void (*)())0x100000 然后再调用它:

*((void (*)())0x100000)();

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务