当前位置:文档之家› C面试题集的CC试题集和答案

C面试题集的CC试题集和答案

C面试题集的CC试题集和答案
C面试题集的CC试题集和答案

C面试题集的C C试题集

和答案

Revised final draft November 26, 2020

本文由luhaigang2010贡献

doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到

本机查看。

1. 用预处理指令#define 声明一个常数,用以表明 1 年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有

多少秒而不是计算出实际的值,是更清晰而没有代价的. 3). 意识到这个表达式将

使一个 16 位机的整型数溢出-因此要用到长整型符号 L, 告诉编译器这个常数是

的长整型数. 4). 如果你在你的表达式中用到 UL(表示无符号长整型),那么你有了一个好的起点.记住,第一印象很重要.

2. 写一个"标准"宏 MIN,这个宏输入两个参数并返回较小的一个. #define MIN(A,B) ((A) <= (B) (A) : )) C\C 试题集 C\C Development 这个测试是为下面的目的而设的:

1). 标识#define 在宏中应用的基本知识.这是很重要的,因为直到嵌入(inline) 操作符变为标准 C 的一部分, 宏是方便产生嵌入代码的唯一方法, 对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法. 2). 三重

条件操作符的知识. 这个操作符存在 C 语言中的原因是它使得编译器能产生比

if-then-else 更优化的代码,了解这个用法是很重要的. 3). 懂得在宏中小心地把参数用括号括起来 4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的

代码时会发生什么事 least = MIN(*p , b);

3. 预处理器标识#error 的目的是什么?

如果你不知道答案,请看参考文献 1.这问题对区分一个正常的伙计和一个书呆子是很有用的.只有书呆子才会读 C 语言课本的附录去找出象这种问题的答案.当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案.

死循环(Infinite loops)

4. 嵌入式系统中经常要用到无限循环,你怎么样用 C 编写死循环呢?

这个问题用几个解决方案.我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底

怎么回事.如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他

们这样做的基本原理. 如果他们的基本答案是: "我被教着这样做, 但从没有想到过为什么. " 这会给我留下一个坏印象. 第三个方案是用goto Loop: …… goto Loop; 应试者如给出上面的方案, 这说明或者他是一个汇编语言程序员 (这也许是好事) 或者他是一个想进入新领域的 BASIC/FORTRAN 程序员.

数据声明(Data declarations)

5. 用变量 a 给出下面的定义 a) 一个整型数(An integer)

b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) d) 一个有 10 个整型数的数组(An array of 10 integers) e) 一个有 10 个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers) f) 一个指向有 10 个整型数数组的指针(A pointer to an array of 10 integers) g)

一个指向函数的指针, 该函数有一个整型参数并返回一个整型数 pointer to (A a function that takes an integer as an argument and returns an integer) h) 一个有 10 个指针的数组, 该指针指向一个函数, 该函数有一个整型参数并返回

一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )

答案是: a) int a; // An integer b) int *a; // A pointer to an

integer c) int **a; // A pointer to a pointer to an integer d) int a[10]; // An array of 10 integers e) int *a[10]; // An array of 10 pointers to integers f) int (*a)[10]; // A pointer to an array of 10 integers g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer 人们经常声称这里有几个问题是那种要翻一下书才能回答的问题, 我同意这种说法.当我写这篇文章时,为了确定语法的正确性,我的确查了一下书.

但是当我被面试的时候,我期望被问到这个问题(或者相近的问题).因为在被

面试的这段时间里,我确定我知道这个问题的答案.应试者如果不知道所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次

面试做准备,那么他又能为什么出准备呢?

Static

6. 关键字 static 的作用是什么?

这个简单的问题很少有人能回答完全.在 C 语言中,关键字 static 有三个明

显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量. 3). 在

模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用. 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分.这是一个应试者的严

重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性.

Const

7.关键字 const 是什么含意我只要一听到被面试者说:"const 意味着常数",我就知道我正在和一个业余者打交道.去年 Dan Saks 已经在他的文章里完全概括了 const 的所有用法,因此

ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉 const 能做什么和不能做什么. 如果你从没有读到那篇文章,只要能说出 const 意味着"

只读"就可以了.尽管这个答案不是完全的答案,但我接受它作为一个正确的答案. (如果你想知道更详细的答案,仔细读一下 Saks 的文章吧.)如果应试者能正确回

答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?

const int a; int const a; const int *a; int * const a; int const * a const;

前两个的作用是一样,a 是一个常整型数.第三个意味着 a 是一个指向常整型

数的指针(也就是,整型数是不可修改的,但指针可以).第四个意思 a 是一个指向

整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的).最后一个意味着 a 是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的).如果应试者能正确回答这些问题,那么他就给我留下了一个好印象.顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const 呢?我也如下的几下理由: 1). 关键字 const 的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的. 如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息.(当然,懂得用 const 的程序员很少会留下的垃圾让别人来清理的.) 2). 通过给优化器一些附加的信息, 使用关键字 const 也许能产生更紧凑的代码. 3). 合理地使用关键字 const 可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改.简而言之,这样可以减少 bug 的出现.

Volatile

8. 关键字 volatile 有什么含意并给出三个不同的例子.

一个定义为 volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份.下面是volatile 变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量回答不出这个问题的人是不会被雇佣的. 我认为这是区分 C 程序员和嵌入式系统程序员的最基本的问题.嵌入式系统程序员经常同硬件,中断,RTOS 等等打交道,所用这些都要求 volatile 变量.不懂得

volatile 内容将会带来灾难. 假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得 volatile 完全的重要性. 1). 一个参数既可以是 const 还可以是 volatile 吗解释为什么. 2). 一个指针可以是 volatile 吗解释为什么. 3). 下面的函数有什么错误: int

square(volatile int *ptr) { return *ptr * *ptr; } 下面是答案: 1). 是的.一个例子是只读的状态寄存器.它是 volatile 因为它可能被意想不到地改变.它是 const 因为程序不应该试图去修改它. 2). 是的.尽管这并不很常见.一个例子是当一个中服务子程序修该一个指向一

个 buffer 的指针时. 3). 这段代码的有个恶作剧.这段代码的目的是用来返指针*ptr 指向值的平方, 但是,由于*ptr 指向一个 volatile 型参数,编译器将产生类似下面的代码: int square(volatile int *ptr) { int a,b; a = *ptr; b = *ptr; return a * b; } 由于*ptr 的值可能被意想不到地该变,因此 a 和 b 可能是不同的.结果,这段代码可能返不是你所期望的平方值!正确的代码如下: long square(volatile int *ptr) { int a; a = *ptr; return a * a; } 位操作(Bit manipulation)

9. 嵌入式系统总是要用户对变量或寄存器进行位操作.给定一个整型变量 a, 写两段代码,第一个设置 a 的 bit 3,第二个清除 a 的 bit 3.在以上两个操作中, 要保持其它位不变.

对这个问题有三种基本的反应 1). 不知道如何下手.该被面者从没做过任何嵌入式系统的工作. 2). 用 bit fields.Bit fields 是被扔到 C 语言死角的东西,

它保证你的代码在不同

编译器之间是不可移植的,同时也保证了的你的代码是不可重用的.我最近不幸看到 Infineon 为其较复杂的通信芯片写的驱动程序,它用到了 bit fields 因此

完全对我无用,因为我的编译器用其它的方式来实现 bit fields 的.从道德讲:永远不要让一个非嵌入式的家伙粘实际硬件的边. 3). 用 #defines 和 bit masks

操作.这是一个有极高可移植性的方法,是应该被用到的方法.最佳的解决方案如下: #define BIT3 (0x1<<3) static int a; void set_bit3(void) { a |= BIT3; } void clear_bit3(void) { a &= ~BIT3; } 一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数, 这也是可以接受的.我希望看到几个要点:说明常

数,|=和&=~操作.

访问固定的内存位置 (Accessing fixed memory locations) C\C Development

10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点. 在某工程中,要求设置一绝对地址为 0x67a9 的整型变量的值为 0xaa66.编译器是一个

纯粹的 ANSI 编译器.写代码去完成这一任务.

这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast) 为一指针是合法的. 这一问题的实现方式随着个人风格不同而不同.

典型的类似代码如下: int *ptr; ptr = (int *)0x67a9; *ptr = 0xaa55;

一个较晦涩的方法是: *(int * const)(0x67a9) = 0xaa55;

即使你的品味更接近第二种方案,但我建议你在面试时使用第一种方案.

中断(Interrupts)

11. 中断是嵌入式系统中重要的组成部分, 这导致了很多编译开发商提供一种扩展—让标准 C 支持中断.具代表事实是,产生了一个新的关键字__interrupt.下面的代码就使用了__interrupt 关键字去定义了一个中断服务子程序(ISR),请评

论一下这段代码的.

__interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(" Area = %f", area); return area; } 这个函数有太多的错误了,以至让人不知从何说起了: 1). ISR 不能返回一个值.如果你不懂这个,那么你不会被雇用的. 2). ISR 不能传递参数.如果你没有看

到这一点,你被雇用的机会等同第一项. 3). 在许多的处理器/编译器中,浮点一般

都是不可重入的.有些处理器/编译器

需要让额处的寄存器入栈, 有些处理器/编译器就是不允许在 ISR 中做浮点运算. 此外,ISR 应该是短而有效率的,在 ISR 中做浮点运算是不明智的. 4). 与第

三点一脉相承,printf()经常有重入和性能上的问题.如果你丢掉了第三和第四点,我不会太为难你的.不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了.

代码例子(Code examples) 12 . 下面的代码输出是什么,为什么?

void foo(void) { unsigned int a = 6; int b = -20; (a b > 6) puts("> 6") : puts("<= 6"); }

这个问题测试你是否懂得 C 语言中的整数自动转换原则, 我发现有些开发者懂得极少这些东西.不管如何,这无符号整型问题的答案是输出是">6".原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型. 因此-20 变成了一个非常大的正整数,所以该表达式计算出的结果大于 6.这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的. 如果你答错了这个问题,你也就到了得不到这份工作的边缘.

13. 评价下面的代码片断:

unsigned int zero = 0; unsigned int compzero = 0xFFFF; /*1's complement of zero */

对于一个 int 型不是 16 位的处理器为说,上面的代码是不正确的.应编写如下:

unsigned int compzero = ~0;

这一问题真正能揭露出应试者是否懂得处理器字长的重要性.在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而 PC 机程序往往把硬件作为一个无法避免的烦恼. 到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得.如果显然应试者不是很好,那么这个测试就在这里结束了.但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错.提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案.不管如何,你就当是这个娱乐吧…

动态内存分配(Dynamic memory allocation)

14. 尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的.那么嵌入式系统中,动态分配内存可能发生的问题是什么?

这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等. 这个主题已经在 ESP 杂志中被广泛地讨论过了(主要是 P.J. Plauger, 他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么一个小节目:下面的代码片段的输出是什么,为什么?

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL) puts("Got a null pointer"); else puts("Got a valid pointer");

这是一个有趣的问题.最近在我的一个同事不经意把 0 值传给了函数 malloc, 得到了一个合法的指针之后,我才想到这个问题.这就是上面的代码,该代码的输出是"Got a valid pointer".我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确.得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些.

Typedef

15. Typedef 在 C 语言中频繁用以声明一个已经存在的数据类型的同义字.也可以用预处理器做类似的事.例如,思考一下下面的例子: #define dPS struct s * typedef struct s * tPS;

以上两种情况的意图都是要定义 dPS 和 tPS 作为一个指向结构 s 指针.哪种方法更好呢(如果有的话)为什么这是一个非常微妙的问题, 任何人答对这个问题

(正当的原因) 是应当被恭喜的. 答案是:typedef 更好.思考下面的例子: dPS

p1,p2; tPS p3,p4;

第一个扩展为 struct s * p1, p2;

上面的代码定义 p1 为一个指向结构的指,p2 为一个实际的结构,这也许不是

你想要的.第二个例子正确地定义了 p3 和 p4 两个指针.

晦涩的语法

16. C 语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么 int a = 5, b = 7, c; c = a b;

这个问题将做为这个测验的一个愉快的结尾.不管你相不相信,上面的例子是完全合乎语法的. 问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法.因此,上面的代

码被处理成: c = a b; 因此, 这段代码持行后 a = 6, b = 7, c = 12. 如果你知道答案,或猜出正确答案,做得好.如果你不知道答案,我也不把这个当作问题.我发现这个问题的最大好处是:这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题

What will print out?

main() { char *p1="name"; char *p2; p2=(char*)malloc(20); memset (p2, 0, 20);

while(*p2 = *p1 ); printf("%sn",p2);

}

Answer:empty string.

What will be printed as the result of the operation below:

main() { int x=20,y=35; x=y x ; y= y x;

printf("%d%dn",x,y); }

Answer : 5794

What will be printed as the result of the operation below:

main() { int x=5; printf("%d,%d,%dn",x,x< <2,x>>2); }

Answer: 5,20,1

What will be printed as the result of the operation below:

#define swap(a,b) a=a b;b=a-b;a=a-b; void main() { int x=5, y=10; swap (x,y); printf("%d %dn",x,y); swap2(x,y); printf("%d %dn",x,y); }

int swap2(int a, int b) { int temp; temp=a; b=a; a=temp; return 0;

}

Answer: 10, 5 10, 5

What will be printed as the result of the operation below:

main() { char *ptr = " Cisco Systems"; *ptr ; printf("%sn",ptr);

ptr ; printf("%sn",ptr); }

Answer:Cisco Systems isco systems

What will be printed as the result of the operation below:

main() { char s1[]="Cisco"; char s2[]= "systems"; printf("%s",s1); } Answer: Cisco

What will be printed as the result of the operation below:

main() { char *p1; char *p2; p1=(char *)malloc(25);

p2=(char *)malloc(25);

strcpy(p1,"Cisco"); strcpy(p2,"systems"); strcat(p1,p2);

printf("%s",p1);

}

Answer: Ciscosystems

The following variable is available in file1.c, who can access it: static int average;

Answer: all the functions in the file1.c can access the variable.

WHat will be the result of the following code?

#define TRUE 0 // some code while(TRUE) {

// some code

}

Answer: This will not go into the loop as TRUE is defined as 0.

What will be printed as the result of the operation below:

int x; int modifyvalue() { return(x =10); } int changevalue(int x) { return(x =1); }

void main() { int x=10; x ; changevalue(x); x ; modifyvalue(); printf("First output:%dn",x);

x ; changevalue(x); printf("Second output:%dn",x); modifyvalue(); printf("Third output:%dn",x);

}

Answer: 12 , 13 , 13

What will be printed as the result of the operation below:

main() { int x=10, y=15; x = x ; y = y; printf("%d %dn",x,y); } Answer: 11, 16

What will be printed as the result of the operation below:

main() { int a=0; if(a==0) printf("Cisco Systemsn"); printf("Cisco Systemsn"); }

Answer: Two lines with "Cisco Systems" will be printed.

再次更新 C 相关题集相关题集

1. 以下三条输出语句分别输出什么[C 易] char str1[] = "abc"; char

str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc"; const char* str6 = "abc"; cout << boolalpha << ( str1==str2 ) << endl; // 输出什么 cout << boolalpha << ( str3==str4 ) << endl; // 输出什么 cout << boolalpha << ( str5==str6 ) << endl; // 输出什么

13. 非 C 内建型别 A 和 B,在哪几种情况下 B 能隐式转化为 A[C 中等] 答: a. class B : public A { ……} // B 公有继承自 A,可以是间接继承的 b. class B { operator A( ); } // B 实现了隐式转化为 A 的转化 c. class A

{ A( const B& ); } // A 实现了 non-explicit 的参数为 B(可以有其他带默认值的参数)构造函数 d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

12. 以下代码中的两个 sizeof 用法有问题吗[C 易] void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母 {

for( size_t i=0; i> temp; unsigned int const size2 = temp; char

str2[ size2 ];

9. 以下代码中的输出语句输出 0 吗,为什么[C 易] struct CLS { int m_i; CLS( int i ) : m_i(i) {} CLS() { CLS(0); }

}; CLS obj; cout << obj.m_i << endl;

10. C 中的空类,默认产生哪些类成员函数[C 易] 答: class Empty

{ public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函

数 ~Empty(); // 析构函数 Empty& operator=( const Empty& ); // 赋值运算符Empty* operator&(); // 取址运算符 const Empty* operator&() const; // 取

址运算符 const };

3. 以下两条输出语句分别输出什么[C 难] float a = 1.0f; cout <<

(int)a << endl; cout << (int&)a << endl; cout << boolalpha << ( (int)a

== (int&)a ) << endl; // 输出什么 float b = 0.0f; cout << (int)b << endl; cout << (int&)b << endl; cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么

2. 以下反向遍历 array 数组的方法有什么错误[STL 易]

vector array; array.push_back( 1 ); array.push_back( 2 );

array.push_back( 3 );

for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历

array 数组 { cout << array[i] << endl; }

6. 以下代码有什么问题[STL 易] typedef vector IntArray; IntArray array; array.push_back( 1 ); array.push_back( 2 ); array.push_back( 2 ); array.push_back( 3 ); // 删除 array 数组中所有的 2

for( IntArray::iterator itor=array.begin(); itor!=array.end(); itor ) { if( 2 == *itor ) array.erase( itor ); }

11. 写一个函数,完成内存之间的拷贝.[考虑问题是否全面] 答: 程序代码

void* mymemcpy( void *dest, const void *src, size_t count ) {

char* pdest = static_cast( dest ); const char* psrc =

static_cast( src ); if( pdest>psrc && pdest

system( "Pause" ); return 0; } 1. 以下三条输出语句分别输出什么[C 易] char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc";

const char* str5 = "abc"; const char* str6 = "abc"; cout <<

boolalpha << ( str1==str2 ) << endl; // 输出什么 cout << boolalpha << ( str3==str4 ) << endl; // 输出什么 cout << boolalpha << ( str5==str6 ) << endl; // 输出什么

文章出自 https://www.doczj.com/doc/db13359017.html,/ 2. 非 C 内建型别 A 和 B,在哪几种情况下

B 能隐式转化为 A[

C 中等]

答: a. class B : public A { ……} // B 公有继承自 A,可以是间接继承的b. class B { operator A( ); } // B 实现了隐式转化为 A 的转化 c. class A { A( const B& ); } // A 实现了 non-explicit 的参数为 B(可以有其他带默认值的参数)构造函数 d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

3. 以下代码中的两个 sizeof 用法有问题吗[C 易] void UpperCase( char

str[] ) // 将 str 中的小写字母转换成大写字母 { for( size_t i=0; i> temp; unsigned int const size2 = temp; char str2[ size2 ];

8. 以下代码中的输出语句输出 0 吗,为什么[C 易] struct CLS { int m_i; CLS( int i ) : m_i(i) {} CLS() { CLS(0); } }; CLS obj; cout << obj.m_i

<< endl;

9. C 中的空类,默认产生哪些类成员函数[C 易] 答: class Empty {

public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造

函数 ~Empty(); // 析构函数 Empty& operator=( const Empty& ); // 赋值运算符 Empty* operator&(); // 取址运算符 const Empty* operator&() const; // 取址运算符 const };

10. 以下两条输出语句分别输出什么[C 难] float a = 1.0f; cout << (int)a << endl; cout << (int&)a << endl; cout << boolalpha << ( (int)a

== (int&)a ) << endl; // 输出什么 float b = 0.0f; cout << (int)b << endl; cout << (int&)b << endl; cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么

11. 以下反向遍历 array 数组的方法有什么错误[STL 易] vector array; array.push_back( 1 ); array.push_back( 2 ); array.push_back( 3 );

for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历 array

数组 { cout << array[i] << endl; }

12. 以下代码有什么问题[STL 易] typedef vector IntArray; IntArray array; array.push_back( 1 ); array.push_back( 2 ); array.push_back( 2 ); array.push_back( 3 ); // 删除 array 数组中所有的 2

for( IntArray::iterator itor=array.begin(); itor!=array.end(); itor ) { if( 2 == *itor ) array.erase( itor ); }

13. 写一个函数,完成内存之间的拷贝.[考虑问题是否全面] 答: void* mymemcpy( void *dest, const void *src, size_t count ) { char* pdest = static_cast( dest ); const char* psrc = static_cast

char*>( src ); if( pdest>psrc && pdest

pdest[i] = psrc[i]; } return dest; } int main( void ) { char str[] = "0123456789"; mymemcpy( str 1, str 0, 9 ); cout << str << endl;

system( "Pause" ); return 0; }

本试题仅用于考查 C /C 程序员的基本编程技能.内容限于 C /C 常用语法, 不涉及数据结构,算法以及深奥的语法.考试成绩能反映出考生的编程质量以及对

C /C 的理解程度,但不能反映考生的智力和软件开发能力. 笔试时间 90 分钟.请考生认真答题,切勿轻视.

一,请填写 BOOL , float, 指针变量与"零值"比较的 if 语句.(10 分)

提示:这里"零值"可以是 0, 0.0 , FALSE 或者"空指针".例如 int 变量 n 与"零值"比较的 if 语句为:

if ( n == 0 ) if ( n != 0 )

以此类推.

请写出 BOOL flag 与"零值"比较的 if 语句: 请写出 float x 与"零值"比较的 if 语句: 请写出 char *p 与"零值"比较的 if 语句:

二,以下为 Windows NT 下的 32 位 C 程序,请计算 sizeof 的值(10 分) char str[] = "Hello" ; char *p = str ; int n = 10; 请计算 sizeof (str ) = sizeof ( p ) = sizeof ( n ) = void Func ( char str[100]) { 请计算

sizeof( str ) = }

void *p = malloc( 100 ); 请计算 sizeof ( p ) =

三,简答题(25 分) 1,头文件中的 ifndef/define/endif 干什么用

2,#include 和 #include "filename.h" 有什么区别 3,const 有什么用途(请至少说明两种)

4, C 程序中调用被 C 编译器编译后的函数, 在为什么要加 extern "C"声明 5,请简述以下两个 for 循环的优缺点 // 第一个 for (i=0; i ;) { if (condition) DoSomething(); else DoOtherthing(); } // 第二个

if (condition) { for (i=0; i ;) DoSomething(); } else { for (i=0;

i ;) DoOtherthing(); }

优点: 缺点: 优点: 缺点:

四,有关内存的思考题(20 分) void GetMemory(char *p) { p = (char

*)malloc(100); }

void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); }

请问运行 Test 函数会有什么样的结果?

答: char *GetMemory(void) { char p[] = "hello world"; return p; }

void Test(void) { char *str = NULL; str = GetMemory();

printf(str); }

请问运行 Test 函数会有什么样的结果答: Void GetMemory2(char **p, int num) { *p = (char *)malloc(num); }

void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello"); printf(str); }

请问运行 Test 函数会有什么样的结果?

答: void Test(void) { char *str = (char *) malloc(100); strcpy(str, "hello"); free(str); if(str != NULL)

{ strcpy(str, "world"); printf(str); } }

请问运行 Test 函数会有什么样的结果?

答:

五,编写 strcpy 函数(10 分) 已知 strcpy 函数的原型是 char

*strcpy(char *strDest, const char *strSrc); 其中 strDest 是目的字符

串,strSrc 是源字符串. (1)不调用 C /C 的字符串库函数,请编写函数 strcpy (2)strcpy 能把 strSrc 的内容复制到 strDest,为什么还要 char * 类型的返回值?

六,编写类 String 的构造函数,析构函数和赋值函数(25 分) 已知类 String 的原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数

private: char *m_data; // 用于保存字符串 };

请编写 String 的上述 4 个函数.

文章出自 https://www.doczj.com/doc/db13359017.html,/ 文章出自网魂工作室 https://www.doczj.com/doc/db13359017.html,/ 附录 C :C /C 试题的答案与评分标准一,请填写 BOOL , float, 指针变量与"零值"比较的 if 语句.(10 分)

请写出 BOOL flag 与"零值"比较的 if 语句.(3 分)

标准答案: if ( flag ) if ( !flag ) 如下写法均属不良风格,不得分.

if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) 请写出 float x 与"零值"比较的 if 语句.(4 分)

标准答案示例:

const float EPSINON = 0.00001;

if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮点变量用"=="或"!="与

数字比较,应该设法转化成">="或"<="此类形式.

如下是错误的写法,不得分.

if (x == 0.0) if (x != 0.0)

请写出 char *p 与"零值"比较的 if 语句.(3 分)

标准答案:

if (p == NULL) if (p != NULL) 如下写法均属不良风格,不得分.

if (p == 0) if (p != 0)

if (p) if (!)

二,以下为 Windows NT 下的 32 位 C 程序,请计算 sizeof 的值(10 分) char str[] = "Hello" ; char *p = str ;

int n = 10; 请计算 sizeof (str ) = 6 (2 分) sizeof ( p ) = 4 (2 分) sizeof ( n ) = 4 (2 分) void Func ( char str[100]) { 请计算 sizeof( str ) = 4 (2 分) }

void *p = malloc( 100 ); 请计算 sizeof ( p ) = 4 (2 分)

三,简答题(25 分) 1,头文件中的 ifndef/define/endif 干什么用(5 分) 答:防止该头文件被重复引用.

2,#include 和 #include "filename.h" 有什么区别(5 分)

华为的 C\C 面试题面试题

Q1:请你分别划划 OSI 的七层网络结构图,和 TCP/IP 的五层结构图 : Q2:请

你详细的解释一下 IP 协议的定义,在哪个层上面,主要有什么作用 : TCP 与 UDP 呢 : 总得来说前面两道题目还是比较简单的! : Q3:请问交换机和路由器分别的实现原理是什么分别在哪个层次上面实

: 现的 : Q4:请问 C 的类和 C 里面的 struct 有什么区别 : Q5:请讲一讲

析构函数和虚函数的用法和作用 : Q6:全局变量和局部变量有什么区别实怎么实现的操作系统和编译器 : 是怎么知道的 : Q7:一些寄存器的题目,我忘记了具体实什么题目,主要好像是寻址和内 : 存管理等一些知识,不记得了. : Q8:8086 是多少

尉的系统在数据总线上是怎么实现的还有一些硬件方 : 面的知识我既不清楚了.

: 一般建议参加华为的研发面试的同学先要准备一下相关的知识,软件的主要 : 是看看 C 和数据结构方面的,硬件模电,数电和微机原理

两道 c 面试题

1,一个学生的信息是:姓名,学号,性别,年龄等信息,用一个链表,把这些学生

信息连在一起, 给出一个 age, 在些链表中删除学生年龄等于 age 的学生信息. 程序代码 #i nclude "stdio.h" #i nclude "conio.h"

struct stu{ char name[20]; char sex; int no; int age;

struct stu * next; }*linklist; struct stu *creatlist(int n) { int i; //h 为头结点,p 为前一结点,s 为当前结点 struct stu *h,*p,*s; h = (struct stu *)malloc(sizeof(struct stu)); h->next = NULL; p=h; for(i=0;inext = s;

printf("Please input the information of the student: name sex no age

\n"); scanf("%s %c %d %d",s->name,&s->sex,&s->no,&s->age); s->next = NULL; p = s; } printf("Create successful!"); return(h); } void

deletelist(struct stu *s,int a) { struct stu *p; while(s->age!=a) { p = s;

s = s->next; } if(s==NULL) printf("The record is not exist."); else { p->next = s->next; printf("Delete successful!"); } } void

display(struct stu *s) { s = s->next; while(s!=NULL)

{ printf("%s %c %d %d\n",s->name,s->sex,s->no,s->age); s = s->next; } } int main() { struct stu *s; int n,age; printf("Please input the length

of seqlist:\n"); scanf("%d",&n); s = creatlist(n); display(s);

printf("Please input the age:\n");

scanf("%d",&age); deletelist(s,age); display(s); return 0; }

2,实现一个函数,把一个字符串中的字符从小写转为大写. 程序代码 #i

nclude "stdio.h" #i nclude "conio.h"

void uppers(char *s,char *us) { for(;*s!='\0';s ,us )

{ if(*s>='a'&&*s<='z') *us = *s-32; else *us = *s; } *us = '\0'; } int main() { char *s,*us; char ss[20];

printf("Please input a string:\n"); scanf("%s",ss); s = ss;

uppers(s,us); printf("The result is:\n%s\n",us); getch(); } 文章出自网魂工作室 https://www.doczj.com/doc/db13359017.html,/ C/C 面试题大汇总之微软亚洲技术中心面试题 2006 年 10 月 28 日更新 C/C 面试题大汇总之微软亚洲技术中心面试题面试题大汇总之微软亚洲技术中心面试题 1.进程和线程的差别. 2.测试方法 3.Heap 与 stack 的差别. 4.Windows 下的内存是如何管理的 5.介绍.Net 和.Net 的安全性. 6.客户端如何访问.Net 组件实现 Web Service 7.C/C 编译器中虚表是如何完成的 8.谈谈 COM 的线程模型.然后讨论进程内/外组件的差别. 9.谈谈 IA32 下的分页机制 10.给两个变量,如何找出一个带环单链表中是什么地方出现环的 11.在 IA32 中一共有多少种办法从用户态跳到内核态 12.如果只想让程序有一个实例运行,不能运行两个.像 winamp 一样,只能开一个窗口,怎样实现 13.如何截取键盘的响应,让所有的'a'变成'b' 14.Apartment 在 COM 中有什么用为什么要引入 15.存储过程是什么有什么用有什么优点 16.Template 有什么特点什么时候用 17.谈谈 Windows DNA 结构的特点和优点. 18.网络编程中设计并发服务器,使用多进程与多线程 ,请问有什么区别

1

华为C语言机试题面试题汇总

1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50 #include main() { int num[50]={0}; int i,n; printf("请输入整型数组的长度(1~50):"); scanf("%d",&n); printf("请输入整型数组的元素:"); for (i=0;inum[j]) min_num=num[j]; } int sum=min_num+max_num; printf("数组中最大与最小值之和:%d\n",sum); return 0; } 2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。。。 3111111111111111111111111.。。。,则输出。。。。 #include #include #include main() { char *num1,*num2; //两个长长整型数据 char *sum;

// int temp; int len_num1,len_num2; // 两个长长整型数据的长度 int len_max,len_min; num1=(char*)malloc(sizeof(char)); num2=(char*)malloc(sizeof(char)); printf("输入两个长长整型数据:"); scanf("%s",num1); printf("输入两个长长整型数据:"); scanf("%s",num2); len_num1=strlen(num1); len_num2=strlen(num2); len_max=(len_num1>=len_num2)? len_num1:len_num2; len_min=(len_num1<=len_num2)? len_num1:len_num2; int len_max1=len_max; sum=(char*)malloc(sizeof(char)*len_max); memset(sum,0x00,len_max+1);//切忌初始化 for(;len_num1>0&&len_num2>0;len_num1--,len_num2--) { sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0')); } if(len_num1>0) { sum[len_max--]=num1[len_num1 - 1 ]-'0'; len_num1--; } if(len_num2>0) { sum[len_max--]=num1[len_num2 - 1]-'0'; len_num2--; } for(int j=len_max1;j>=0;j--) //实现进位操作 { // temp=sum[j]-'0'; if(sum[j]>=10) { sum[j-1]+=sum[j]/10; sum[j]%=10; } } char *outsum=(char*)malloc(sizeof(char)*len_max1); j=0; while(sum[j]==0) //跳出头部0元素 j++; for(int m=0;m

各大知名公司校园招聘经典常见面试题集锦

各大知名公司校园招聘经典常见面试题集锦 一.自我认识类 1.你的缺点是什么?如果我们淘汰你,你认为原因是什么? (华为公司2011校招面试题,分享人:彭红) 2.你最骄傲的经历是什么?描述一个你与人合作共同完成目标的经历。 (2011宝洁校招面试题,分享人:彭红) 3.请详细描述一下你理想中的未来工作环境及每日工作内容。举例说明一件在 校期间你认为最有成就感和最失败的事。 (三星集团2010校招面试题,分享人:李玉娇) 4.你能不能喝酒? (中国银行总行2009招聘面试题,分享人:何轶男) 5.依靠你的专业素养能给团队带来哪些帮助?用三个词形容你的大学生活。(中 国建设银行苏州分行2010校招面试题,分享人:张栩萌) 6.你的梦想是什么,为此做了哪些努力?(优衣库2010校招面试题,分享人: 张栩萌) 7.你生活中有没有遇到过挫折?是如何面对的? (腾讯2009校招面试题,分享人:刘妍) 8.你心目中的另一半是什么样子? (东莞银行2012面试题,分享人:刁媛、万宝军) 9.请用一句话总结自己二十年的人生感悟。 (飞亚达2012面试题,分享人:吴念菲)

10.你遇到的最大挫折和获得的最大成就是什么? (上海交通大学2012研究生复试题,分享人:游昕琦、李如诗) 11.你最大的缺点是什么? (汇丰银行2012管培生面试,分享人:李立彬、杨玮希) 12.你平时有什么爱好?你一开始是选择银行作为实习单位,后来为什么要来中 国移动呢? (深圳移动2012面试题,分享人:陈奥、江程) 13.举例说明你怎样获得一种技能,并将其转化为实践。 (宝洁2012面试题,分享人:陈思蕾、杨媛颖) 14.你对未来的职业规划是怎么样的? (毕马威2012面试题,分享人:唐寅、雷静晗) 15.说说你所知道的RBS。讲一个你所遇到的困难,如何克服?说说你最大的缺 点。 (苏格兰皇家银行2012全球实习生面试,分享人:杨玮希) 16.你平时爱看什么书报杂志?你除了专业课,最喜欢的课是什么? (淡马锡投资2012中国管培生面试题,分享人:杨玮希) 17.你希望与什么样的上级共事? (中国农业银行宜昌分行2012面试题,分享人:向思凤、赵长龙) 18.你认为将来会是什么原因让你离职? (建行四川省分行2012面试题,分享人:李冀明、李阳) 19.请简要谈谈你的兴趣爱好。 (建行江苏分行2012面试题,分享人:王秋蕾、张静秋)

嵌入式C语言面试题汇总(超经典)

第一部分:基本概念及其它问答题 1、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。 2、“引用”与指针的区别是什么? 答、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。 3、.h头文件中的ifndef/define/endif 的作用? 答:防止该头文件被重复引用。 4、#include 与#include “file.h”的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。 5、描述实时系统的基本特性 答:在特定时间内完成特定的任务,实时性与可靠性。 6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答:全局变量储存在静态数据区,局部变量在堆栈中。 7、什么是平衡二叉树? 答:左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 8、堆栈溢出一般是由什么原因导致的? 答:1.没有回收垃圾资源 2.层次太深的递归调用

公务员面试题大集锦

公务员面试题大集锦

————————————————————————————————作者: ————————————————————————————————日期:

公务员面试题大集锦1?,"作为副职,在和主要领导研究问题时,你认为自己的意见正确,提出后却不被采纳,面对这种情况,你如何处理" 你在思考时,应明确以下思路:一要处以公心,冷静对待;二要再全面分析自己意见的正确性和可行性;三是如确认自己的意见切实可行,则可以向主要领导进一步反映陈述;四是经过反映陈述,仍得不到赞同和支持,可保留意见,若属重大问题可向上级反映.回答时,一步一步,将自己的观点逐层展开,使之环环相扣,从而增加答问陈述的逻辑性. 2,"为什么有的单位能'三个臭皮匠赛过一个诸葛亮',而有的单位则是'三个和尚没水喝'.对待后一种情况,如果你去上任,该怎样处理" ?听题后可首先简要思考前单位"赛过诸葛亮"的经验,再按新形势的要求思考后单位的解决办法.比如:?(1)寻找根源,激发合力;(2)合理用人,各尽其能;(3)明确职责,按制奖惩;(4)定编定岗,引进竞争机制.这样答问就与当前形势结合得紧密,体现出新意. 3,当前对有些单位实施的'末位淘汰制',有不同争议,你怎么看待这种用人措施"?客观的答案应该是:"末位淘汰制"是一种向竞争机制发展的过渡性措施,可以试行;但要因情况而异,不能一刀切.再说"末位淘汰制"也不完全等同于竞争机制.对于规模较大,人数较多的单位最初实行,然后实施竞争机制,未尝不可.如果在规模小,人数少的单位实行,效果就不一定好,因为也确有些单位人数不多,几乎所有人员都很努力,成绩都不错,甚至难分上下,如果实行就会造成人心惶惶,人际关系紧张的不利局面. ?4,遇到挫折你会怎么做?答法一:(1)辨证唯物主义告诉我们,事物的发展都是前进性和曲折性的统一,虽然道路是曲折的,但发展的前途是光明的.众所周知,著名的发明家爱迪生,在经历了六千余次的挫折和失败后,把灯丝的寿命延长了1000小时.因此,"不经历风雨,怎么见彩虹",挫折是人生必不可少的考验,经历越多的挫折,人就会越成熟,所以要正视挫折,不要回避;(2)其次要对挫折的原因进行分析,弄清楚是主观原因还是客观原因造成的,然后对症下药,用正确的方法解决它;(3)同时调整心态,必要时改变一下工作方法,使当前工作得以正常开展.?答法二:事业有成一帆风顺时许多人的美好想法,其实很难做到一帆风顺,要接受这样一个现实,人的一生不可能是一帆风顺的,成功的背后会有许许多多的艰辛,痛苦甚至挫折.在人生的一段时期遇到一些挫折是很正常的.只有经验知识和经历的积累才能塑造出一个成功者.我觉得面对挫折要做到以下几点:第一要敢于面对.哪里跌倒要从哪里爬起来,小平同志还是三起三落呢,不要惧怕困难,要敢于向困难挑战.再者要认真分析失败的原因,寻根究源,俗话说失败乃成功之母,在挫折中掌握教训,为下一次奋起提供经验.还有在平时的工作生化中要加强学习,人的一生是有限的,不可能经历所有的事,要在别人的经验吸取教训.最后可能由于当局者迷或者知识经历的不足,自己对于挫折并没有特别好的处理方法,这是可以求教自己的亲人朋友,群策群力渡过难关.?5,你最喜欢的一本书是那本?答:我喜欢读书,一个人最早看的一本书可能会对个人的一生产生很大的影响,我小时候最早看的一本书是三国演义,三国演义这本书博大精深,书中描写的一些人物我对我的成长起了许多潜移默化的作用,现在看来我还是最喜欢三国演义如果我说我喜欢关羽,可能俗了一点,但从关羽身上表现出来的诚信和忠诚一直是我很推崇的.我觉得诚心是立身之本,而对单位的忠诚是你能不能做出一番事业的前提条件.当然这个忠诚还包括对领导的忠诚. 从周瑜身上我学到对别人要宽容,不要又嫉妒心;从诸葛亮身上学到要加强自己学习等等.三国演义这本书博大精深,对我的影响也是全方位的,时间原因我不再赘述.?6,再穷不能穷教育,再苦不能苦孩子,体会?①教育是百年大计,所谓"经济未动,教育先行",它关系着国家的兴衰,体现着社会的文明程度,所以,全社会都应该重视教育.社会以人为本,有受教育的人才有经济的繁荣.特别是现在,我国经济发展迅速,更应该把教育放在突出的位置,让每个孩子都有书读,都读好书. ②再苦不能苦孩子,是因为父母都从艰苦的环境中走来,而现在日子好了,孩子少了,物质条件又好了,所以家长都不希望孩子再受苦受累.但在满足孩子基本条件的过程中,也应培养他们艰苦奋斗,自强自立的精神,不能放纵与溺爱.对孩子人格的培养应放在首位.所以,社会舆论及家长的认识要全面.

100道面试常见问题经典面试题

工作动机、个人愿望 ?问题:请给我们谈谈你自己的一些情况 ?回答:简要的描述你的相关工作经历以及你的一些特征,包括与人相处的能力和个人的性格特征。如果你一下子不能够确定面试者到底需要什么样的内容,你可以这样说: “有没有什么您特别感兴趣的范围?” ?点评:企业以此来判断是否应该聘用你。通过你的谈论,可以看出你想的是如何为公司效力还是那些会影响工作的个人问题。当然,还可以知道你的一些背景。 问题:你是哪年出生的?你是哪所大学毕业的?等等 回答:我是XXXX年出生的。我是XX大学毕业的。 ?点评:这类问题至为关键的是要针对每个问题简洁明了的回答,不可拖泥带水,也不必再加什么说明。完全不必再画蛇添足的说“我属X,今年XX岁”之类的话。至于专业等 或许主考官接下来的问题就是针对此而言的,故而不必迫不及待和盘托出。 ?问题:你认为对你来说现在找一份工作是不是不太容易,或者你很需要这份工作? ?回答: ? 1.是的。 ? 2.我看不见得。 ?点评: ?一般按1回答,一切便大功告成。 ?有些同学为了显示自己的“不卑不亢“,强调个人尊严,故按2回答。结果,用人单位打消了录用该生的念头,理由是:“此人比较傲“一句话,断送了该生一次较好的就 业机会。 ?问题:为何辞去原来的工作? ?回答:工作地点离家较远,路上花费时间多,发生交通问题时,影响工作。贵公司的工作岗位更适合自己专业(个性)的发展。 ?点评:为了避免应聘者以相同的原因辞职,公司尽量能做到对这方面原因的了解,有助于创造一个良好的工作环境和人际氛围。因此,应聘者最好说出对方能信服的理由。 如果自己确有缺点,要说出“将尽量克服自己缺点”,作为有信心改变这类情况的答复。 ?问题:你是怎么应聘到我们公司的?

c语言经典面试题

C语言面试题大汇总之华为面试题 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错. 4、请写出下列代码的输出内容 #include int main(void) { int a,b,c,d; a=10;

c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 5、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对

面试题集锦(公共部分1)

1、简述你的工作经历和工作业绩? 答:我是1985年9月至1989年7月在省新闻出版印刷学校学习。我的工作经历是一部“三部曲”。 第一部:1989年7月至1992年7月在宜春市资料印刷厂工作,担任激光照排车间负责人。主要工作业绩是:为该厂引进了一套先进的激光排版工艺,并成功地运用到生产中,提高了该厂排版工作效率,这项工作具有一定的创新性。 第二部:1992年7月至1995年10月在新余报社印刷厂工作,担任激光照排车间主任、厂团支部书记。主要工作业绩是:在人员少、任务重的情况下,团结大家一道,较好完成了各项工作任务,所在车间连续被评为“先进车间”。 第三步:1995年10月至现在,在市委组织部干部科从事微机操作、干部统计等工作。先后担任副科级、正科级组织员。主要工作业绩是:较好地完成了各项工作,多年被评为“优秀公务员”。 2、在你以往从事的工作中,你最喜欢哪项工作,为什么?最讨厌哪项工作,为什么? 答:对于我以往从事的工作,我谈不上哪项最喜欢,哪项最讨厌。无论哪项工作,总的来说我都是比较喜欢,但一个人的心理不可能没有波动,我有时也会产生一时的浮躁心理,但我总是熊够克服这种浮躁心理。我始终这样认为,工作是一个人的立身之本,一个连工作都做不好的人,其他任何想法都是空中楼阁。理想固然重要,但更重要的是脚踏实地。因此,我总是尽心尽力做好本职工作。 3、你在以往的工作中遇到过什么困难?最后是怎么解决的?

答:工作中要想一帆风顺、事事如意是不可能,常常会碰到各种困难。比如说:时间方面的困难,业务方面的问题,人、财、物方面的问题。 碰到这些困难,我首先立足于自己独立解决。比如说工作上发生冲突,一件工作没有做完,又要做另一件工作,那么,在分清轻重缓急的情况下,延长一点工作时间。 其次,向专家、行家请教。比如,业务方面的问题,不懂的地方,向行家请教。 再者,需要领导出面解决的,我会向领导汇报,并提出解决的建议,请领导亲自出面解决。比如人、财、物方面的问题。 3、谈谈你受教育和培训的情况、你的兴趣爱好。 答:小学和初中的情况我就不说。我是1985年7月考取小中专,1985年9月至1989年7月在江西省出版印刷学校学习。这四年的学习为我今后的成长和进步打下了坚实的基础。 我的大部分知识是通过自学获得的,先后参加了中文、法律两个专业的自学考试,先后获得大专毕业文凭。1996年10月参加全国律师资格考试,取得了律师资格证书。今年7月,参加省委党校法律专业在职研究生考试,比较顺利地被录取为在职研究生。 在业余时间,我喜欢看书,以提高自己的知识素养。爱好书法,也喜欢和朋友们一起聊聊天,就社会上的一些热点、难点问题交流自己的看法,以锻炼自己的思维能力和开阔视野。 4、谈谈你的未来的计划和目标。 答:我的人生目标是:做一个正直的人,一个高尚的人,一个脱离了低级趣味的人,一个有益于人民、有益于社会的人。 我的五年计划:在学习上,完成在职研究生的学业,提高自

C语言面试题(经典全)

1.static有什么用途?(请至少说明两种) 1)限制变量的作用域 2)设置变量的存储域(堆,主动分配内存也是堆) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在栈 6.堆栈溢出一般是由什么原因导致的? 堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。没有回收垃圾资源导致的是内存泄露最后内存耗尽。 20.不能做switch()的参数类型是: switch的参数不能为实型。(只能是int char) 9.写出float x 与“零值”比较的if语句。 if(x<0.000001&&x>-0.000001)

3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 函数的原型: long atol(const char *nptr); 程序例: #include #include int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); } 1.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

面试模拟题1(C语言)

面试模拟题1 (C) 面试题1:用find 写出查找/opt/kernel目录下(包括子目录)文件名为Kconfig的命令。 cd /opt/kernel; find –name Kconfig 或find /opt/kernel –name Kconfig 面试题2:用 Vi 编译器底行命令模式实现字符串替换,把当前文件中的“xiaodai”全部替换成“banzhang”。 %s/xiaodai/banzhang/g 面试题3:变量的声明和定义有什么区别? 答:变量的定义:为变量分配地址和存储空间,只在一个地方定义 变量的声明:不为变量分配地址,可以在多个地方声明,加入extern 修饰的变量的声明,说明此变量将在文件以外被定义。 很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。 面试题4:sizeof是库函数吗?sizeof 和 strlen 的区别? sizeof 不是库函数,sizeof 是计算变量类型的大小,即占存储区多少个字节; 而 strlen 是计算字符串字面值的实际长度,如字符串“hello”,它的长度是5,则strlen(“hello”) = 5; sizeof 是一个操作符,strlen 是库函数 sizeof 的参数可以是数据的类型,也可以是变量,而strlen 只能以结尾为‘\0’的字符作为参数。 编译器在编译时就计算出了sizeof 的结果,而 strlen 函数必须在运行时才能计算出

来,并且sizeof 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际 的长度。 数组做 sizeof 的参数不退化,而传递给 strlen 做参数就退化指针了,计算出的是数组中字符串中的实际长度。 如: char num[10] = “hello” sizeof(num) = 10, 而 strlen(num) = 5; 又如:char num[] = “helloworld” sizeof(num) = 11, strlen(sum) = 10 注意:sizeof 是最容易混淆为函数名的操作符。 面试题5:链表和数组有什么区别 面试题6:简述队列和栈的异同 面试题7:有以下语句: char a=3, b=6, c; c = a^b<<2; 则c的二进制值是_____。 面试题8:如何打印出当前源文件的文件名以及源文件的当前行号?

技术支持面试题集锦!!!

技术支持面试题集锦 1、杀毒软件:金山,瑞星,卡巴,赛门铁克 2、常见的internet接入方式:无线接入、异步拨号、ISDN 3、VPN特点:利用现有的公共ip网络,实现专线接入,采用隧道和加密技术,隐藏内部网络细节,成本低 4、硬件种类:IDE、SATA、SCSI 5、windows常见的磁盘分区方式:一主+一扩+扩中N个逻辑分区、2主+扩,逻辑分区 6、网络命令及用途:ping 网络连通性、tracert 网络节点数、telnet 远程连接、nslookup 域名解析 ipconfig 网络链接的详细信息、regedit 注册表、ftp 登陆到ftp服务器 7、如何将FAT32分区转为NTFS分区:开始-运行-cmd 在命令提示符下输入: convert X:/FS:NTFS(其中X是盘符) 8、局域网无法上网故障诊断方法: 1:网络连接 2:接着检查“本地连接”的状态。如果本地连接的图标是两个小电脑闪亮,提示“已连接上”,这代表从交换机HUB到电脑的 线路是正常的,网卡基本能正常工作,不能上网是由于操作系统设置不当或软件限制等原因引起的。用Ping 命令Ping远程主 机,看能否Ping通,如果能Ping 通则说明网络连接正常,接着检查电脑中的防火墙设置、代理服务器设置等。 3:如果Ping不通,则可能是网络协议配置问题。检查电脑IP地址、网关、DNS等配置。

4:如果“网络连接”窗口中的本地连接图标是灰色,说明本地连接(网卡)被禁用了,这时只须双击本地连接图标重新启用即可。 5:如果“网络连接”窗口中本地连接图标提示“本地电缆被拔出”,则表明交换机或HUB到用户网卡的网线接头有一端松动了 或网线有问题,接着检查网线是否接触良好,如果接触良好接着检查网线。 9、能上QQ但不能上网问题精解: 一、感染了病毒所致 二、与设置代理服务器有关 三、DNS服务器解释出错 四、系统文件丢失导致IE不能正常启动 五、IE损坏 六、HOSTS文件的问题 七、系统文件的问题 八、杀毒软件的实时监控问题 九、ApplicationManagement服务的问题 十、网络协议和网卡驱动的问题 10、ADSL频繁掉线: 随着温度的升高,空调使用率也不断增加。毫无疑问,空调在制冷运转时,不仅将导致电压降低,而且还会引发感应电流。虽然ADSL Modem在设计时会考虑到电压和电流的波动问题,但过低或过高的电压,仍然无法保障ADSL Modem正常工作。因此,为ADSL Modem或宽带路由器配置一个UPS电源应当是最佳解决方案。 11、技术性网站:HTTP://https://www.doczj.com/doc/db13359017.html,中国工具信息网 12、指出以下服务所默认的端口号:FTP;Telnet;POP3;SMTP;Windows终端服务

C语言面试题大汇总,个人觉得还是比较全

4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 11. 堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12. 什么函数不能声明为虚函数? constructor 13. 冒泡排序算法的时间复杂度是什么? O(n^2) 14. 写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16. Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出 C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

C语言经典面试题目集锦

1.前言 2.声明和初始化 2.1我如何决定使用那种整数类型? 2.264位机上的64位类型是什么样的? 2.3怎样定义和声明全局变量和函数最好? 2.4extern在函数声明中是什么意思? 2.5关键字auto到底有什么用途? 2.6我似乎不能成功定义一个链表。我试过typedef struct{char*item;NODEPTR next;}*NODEPTR;但是编译器报了错误信息。难道在C语言中一个结构不能包含指向自己的指针吗? 2.7怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 2.8函数只定义了一次,调用了一次,但编译器提示非法重定义了。 2.9main()的正确定义是什么?void main()正确吗? 2.10对于没有初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为``零",它可否作为空指针或浮点零? 2.11代码int f(){char a[]="Hello,world!";}不能编译。 2.12这样的初始化有什么问题?char*p=malloc(10);编译器提示``非法初始式"云云。 2.13以下的初始化有什么区别?char a[]="string literal";char*p="string literal";当我向p[i]赋值的时候,我的程序崩溃了。 2.14我总算弄清除函数指针的声明方法了,但怎样才能初始化呢? 3.结构、联合和枚举 3.1声明struct x1{...};和typedef struct{...}x2;有什么不同? 3.2为什么struct x{...};x thestruct;不对? 3.3一个结构可以包含指向自己的指针吗? 3.4在C语言中实现抽象数据类型什么方法最好? 3.5在C中是否有模拟继承等面向对象程序设计特性的好方法? 3.6我遇到这样声明结构的代码:struct name{int namelen;char namestr[1];};然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素。这样合法和可移植吗? 3.7是否有自动比较结构的方法? 3.8如何向接受结构参数的函数传入常数值? 3.9怎样从/向数据文件读/写结构? 3.10我的编译器在结构中留下了空洞,这导致空间浪费而且无法与外部数据文件进行"二进制"读写。能否关掉填充,或者控制结构域的对齐方式? 3.11为什么sizeof返回的值大于结构的期望值,是不是尾部有填充? 3.12如何确定域在结构中的字节偏移? 3.13怎样在运行时用名字访问结构中的域? 3.14程序运行正确,但退出时却``core dump''了,怎么回事? 3.15可以初始化一个联合吗?

2019最新Java面试题,常见面试题及答案汇总

ava最新常见面试题+ 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。 适宜阅读人群 需要面试的初/中/高级java 程序员 想要查漏补缺的人 想要不断完善和扩充自己java 技术栈的人 java 面试官 具体面试题 下面一起来看208 道面试题,具体的内容。 一、Java 基础 1.JDK 和JRE 有什么区别? 2.== 和equals 的区别是什么? 3.两个对象的hashCode()相同,则equals()也一定为true,对吗? 4.final 在java 中有什么作用? 5.java 中的Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用final 修饰吗?

14.接口和抽象类有什么区别? 15.java 中IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和Hashtable 有什么区别? 22.如何决定使用HashMap 还是TreeMap? 23.说一下HashMap 的实现原理? 24.说一下HashSet 的实现原理? 25.ArrayList 和LinkedList 的区别是什么? 26.如何实现数组和List 之间的转换? 27.ArrayList 和Vector 的区别是什么? 28.Array 和ArrayList 有何区别? 29.在Queue 中poll()和remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和ListIterator 有什么区别? 34.怎么确保一个集合不能被修改?

C语言企业面试题集1

题集1及答案 一、选择题 1. 以下操作中,数组比链表速度更快的是____(腾讯) A.原地逆序 B.头部插入 C.返回中间节点 D.返回头部节点 E.选择随机节点 答案: A C E 2. 已知小写字母a的ASCII码为97,大写字母A的ASCII.码为65,以下程序的结果是__________。()(华为) main() { unsigned int a=32,b=66; printf(“%c\n”,alb); } A.66 B.98 C.b D.B 答案:C 评析:位运算符“l”的作用是按位或,即两个二进制数的相应位中只要有一个为1,该位的结果值为l。最后以字符型输出, 98对应的字符“b”。 3. 已知形成链表的存储结构如下图所示,则下述类型描述中的空白处应填_______。(华为) struct link { char data; ___________ }node; A.struct link next B.link*next C.struct next link D.struct link*next 答案:D

评析:在单向链表中,由于每个结点需要存储下一个结点的地址,且下一个结点的数据类型与前一个结点的数据类型完全相同,故应为struct link*next。 4.若进栈序列为l,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是_______。(华为) A.1,4,3,2 B.2,3,4,l C.3,1,4,2 D.3,4, 2,1 答案:C 评析:栈是一种后进先出表,选项c中,先出栈的是3,说明此时栈内必然有1,2,由于l先于2进栈,所以l不可能在2之前出栈,故选项C这种出栈序列是不可能的。 5. 下面程序执行后s的值为() (度小满) int main() { int i=1, j=3, k=0, sum=5; switch(k> -i++) { case 2: sum += 1; case 1: sum += j; case 0: sum += i; break; case -1: sum *= -1; } printf("%d",sum); return 0; } A.5 B.6 C.9 D.10 答案: D case 2 1 0 都满足条件,所以依此相加直到10退出 6.能将高级语言程序转换成目标语言程序的是_______。(华为) A.调试程序 B.解释程序 C.编译程序 D.编辑程序

常见面试题与答案

1.你如何规划自己未来的事业? 答:我的事业计划是勇于进取,所做的事情必须是能够将我的精力与专业知识融入我所在行业与我的工作单位所需要的地方。因此,我希望在今后几年中,成为一名行的专业人士,很清楚地理解自己的公司、行业、最大的挑战以及机会之所在。到那时,我未来的发展目标应该会清晰地显露出来。” 2.你想找一份长期的还是临时性的工作? 答:当然,我要找一份长期性的工作,我想在这个领域发展自己的事业,找机会学习业务,寻求新的挑战,向有经验的专业人士学习。” 3.你对哪类职位感兴趣? 答:我对这些初级岗位感兴趣,可以从中学到公司外的业务,并能给我发展的机会,当我证实了自己的实力之后,可以沿着专业方向或管理方向发展。 4.你对企业运作的看法是什么? 答:任何一家公司的作用是尽可能多赚钱,尽可能快速、高效地赚钱,其运作方式应该鼓励老客户做回头生意,用出色的口碑和信誉发展新客户。”就答结束时,要说明员工作为团队中的一员,所起的作用都是为了达到这个目的。 5.你觉得作为你应聘的第一家单位,是否要考虑你在学校时的分数? 答:当然,用人单位要全面考虑,要看分数,同时也要考查一下应聘者的工作积极性和服从性、对开发业务的理解及实际工作经验,总体来看,经历与专业技能要比分数更有价值。 6.你的薪酬要多少? 答:各单位都有自己的规矩,表示自己会入乡随俗,薪水要经过工作实践来确定。 7.你为什么选择我们公司? 答:我十分看好贵公司所在的行业,我认为贵公司十分重视人才,而且这项工作很适合我,相信自己一定能做好。 8.如果我录用你,你将怎样开展工作? 答:首先听取领导的指示和要求,然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并报领导批准,最后根据计划开展工作。

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

c语言面试题目及最佳答案 1、描述?下gcc的编译过程? gcc编译过程分为4个阶段:预处理、编译、汇编、链接。 预处理:头?件包含、宏替换、条件编译、删除注释 编译:主要进?词法、语法、语义分析等,检查?误后将预处理好的?件编译成汇编?件。汇编:将汇编?件转换成?进制?标?件 链接:将项?中的各个?进制?件+所需的库+启动代码链接成可执??件 2、内存的最?存储单位以及内存的最?计量单位分别是? 内存的最?存储单位为?进制位,内存的最?计量单位字节 3、#include<> 与#include ""的区别? include<>到系统指定?录寻找头?件,#include ""先到项?所在?录寻找头?件,如果没有找再到系统指定的?录下寻找 4、描述?下变量的命名规则 变量名有字?、数值、下划线组成,但不能以数值开头 5、变量的声明与定义有啥区别?

声明变量不需要建?存储空间,变量的定义需要建?存储空间 6、谈谈c语?中有符号和?符号的区别? 有符号:数据的最?位为符号位,0表示正数,1表示负数 ?符号:数据的最?位不是符号位,?是数据的?部分 7、谈谈计算机中补码的意义 统?了零的编码 将符号位与其他位统?处理将减法运算转换成加法运算 8、谈谈数组的特点 同?个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的9、数组的分类 数组的分类主要是:静态数组、动态数组两类。 静态数组:类似int arr[5];在程序运?就确定了数组的??,运?过程不能更改数组的??。动态数组:主要是在堆区申请的空间,数组的??是在程序运?过程中确定,可以更改数组的??。 10、描述?下?维数组的不初始化、部分初始化、完全初始化的不同点 不初始化:如果是局部数组数组元素的内容随机如果是全局数组,数组的元素内容为0

试题题库-—嵌入式开发c语言面试题全套

嵌入式开发.C语言面试题 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多 少 秒而不是计算出实际的值,是更清晰而没有代价的。 3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器 这个常数是的长整型数。 4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记 住 ,第一印象很重要。 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) (A) : )) C\C++试题集C\C++ Development这个测试是为下面的目的而设的: 1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变 为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到 要求的性能,嵌入代码经常是必须的方法。 2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比 if-then-else更优化的代码,了解这个用法是很重要的。 3). 懂得在宏中小心地把参数用括号括起来 4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?Least = MIN(*p++, b); 3. 预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用 的。只有书呆子才会读C语言课本的附录去找出象这种 问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是:

相关主题
文本预览
相关文档 最新文档