一招搞定“C语言声明式”类型的面试题

    在C语言面试中,经常会考查面试者对“C语言声明式”的理解,这类题型听起来就像绕口令一样,一不小心就容易将人绕到沟里,比如:

题1:说明如下四种声明式的区别

1)const char * p;

2)char const * p;

3)char * const p;

4)const char * const p;


题2:写出如下几种要求的声明式(或定义式)

1)一个有10个指针的数组tmp,其指针指向整形数;

2)一个指向有10个整形数数组的指针tmp;

3)一个指向函数的指针,该函数有一个整形参数并返回一个整形数;

4)一个有10个指针的数组,其指针指向一种函数,该型函数有一个int*参数并返回int;

5)一个指向有两个int形参并且返回一个函数指针的函数指针,返回的指针指向一个有一个int形参且返回int的函数;


    很多C语言教材也会为各种声明式列举各种规则,比如:const位于星号左右。这些规则一多,过得时间一长,就很容易混淆,我以前就经常忘记这些规则。那么有没有一个更好的方法来对付这类“C语言声明式”呢?

    答案是:有的!那就是“像C编译器一样去解析”

    事实上,不论多复杂多绕的C代码,都需要经过C编译器翻译成机器码(二进制码),而机器所能执行的都是简单的机器指令,如:加减、取值、赋值等。从这个角度看,C编译器对C代码的编译就是将单条复杂的C语言转为多条简单的机器指令的过程,因此,我们只需要循着编译器设计者的思路去解析“C语言声明式”,就可以百分百正确的理解它。

    《Expert C Programming》第3章介绍了这种C编译器理解“C语言声明式”的方法,并设计了一个简单的“解析程序”。我们只需要掌握这种方法,就可以一劳永逸地解决所有“C语言声明式”类型的面试题。


一、优先级规

你可能感兴趣的:(C/C++)