文档介绍:word
软件(ruǎn jiàn)工程师笔试题〔C/C++〕
2021-03-25 18:19
预处理器〔Preprocessor〕
1. 用预处理指令(zhǐlìng)#define 声明一个(yī ɡè)常数,用以明确(mín
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
word
人们经常声称这里有几个问题是那种要翻一下书才能答复的问题,我同意这种说法。当我写这篇文章时,为了确定语法的正确性,我确实查了一下书。
但是当我被面试(miàn shì)的时候,我期望被问到这个问题〔或者相近(xiānɡ jìn)的问题〕。因为在被面试(miàn shì)的这段时间里,我确定我知道这个问题的答案。应试者如果不知道
所有(suǒyǒu)的答案〔或至少(zhìshǎo)大局部答案〕,那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?
Static
6. 关键字static的作用是什么?
这个简单的问题很少有人能答复完全。在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内〔但在函数体外〕,一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确答复第一局部,一局部能正确答复第二局部,同是很少的人能懂得第三局部。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。
Const
7.关键字const是什么含意?
word
我只要一听到被面试者说:"const意味着常数",我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming),只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案,但我承受它作为一个正确的答案。〔如果你想知道更详细的答案,仔细读一下Saks的文章吧。〕如果应试者能正确答复这个问题,我将问他一个附加的问题:下面的声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前两个的作用(zuòyòng)是一样,a是一个(yī ɡè)常整型数。第三个意味着a是一个(yī ɡè)指向常整型数的指针〔也就是,整型数是不可修改的,但指针(zhǐzhēn)可以〕。第四个意思(yì sī)a是一个指向整型数的常指针〔也就是说,指针指向的整型数是可以修改的,但指针是不可修改的〕。最后一个意味着a是一个指向常整型数的常指针〔也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的〕。如果应试者能正确答复这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。〔当然,懂得用
word
c