数据声明( 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)