background image

    数据声明( Data declarations  

) 5. 

 

用变量 a 

 

给出下面的定义 a) 一个整型数(An 

integer  

) b)

 

一个指向整型数的指针( A pointer to an integer  

) c)一个指向指针的的

 

指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r
    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) 一个指向

 

 

函数的指针, 该函数有一个整型参数并返回一个整型数 (A pointer to 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)