c语言常见面试题目及答案,c语言常见面试题目

1. 用预处理指令 #define 声明一个常数,用以表明 1年中有多少秒(忽略闰年问题)

#define SECONDS_YEAR

(365*24*60*60UL)

int main()

{

printf("the answer is: %lu\n",SECONDS_YEAR);

注意在gcc中 long unsiged int 输出为%lu

2. 写一个 “标准 ”宏MIN ,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A)>(B)?(B):(A))

int main()

{

printf("the answer is: %d\n",MIN(3,4));

这里的A,B只能输入整数

3.用变量 a给出下面的定义

一个指向指针的的指针,它指向的指针是指向一个整型数  int **a

一个有 10个指针的数组,该指针是指向一个整型数的  int

*a[10]

一个指向有 10个整型数数组的指针  int (*a)[10]

一个指向函数的指针,该函数有一个整型参数并返回一个整型数  int (*a)(int)

一个有 10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数  int (*a[10])(int)

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

a.描述静态变量,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

b.描述全局变量,一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。

一个被声明为静态的函数只可被这一模块内的其它函数调用。

那就是, 这个函数被限制在声  明它的模块的本地范围内使用。

5.下面的函数有什么错误:

int square(volatile int *ptr)

{

return *ptr * *ptr;

}

一个定义为 volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值

了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存 在寄存器里的备份。

Ptr内容可能被修改,无法保证两次取得同一个值,应该先取出值放入一个变量中,然后通过这个变量来计算

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

0xaa66。编译器是一个纯粹的 ANSI 编译器。写代码去完成这一任务。

int *p;

P=(int*)0x67a9;

*p=0xaa66;

7.中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字

__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

__interrupt

double compute_area (double radius)

{ double area =

PI * radius * radius;

printf(” Area =

%f”, area);

return

area;

}

这个函数有太多的错误了,以至让人不知从何说起了:

1). ISR

不能返回一个值。如果你不懂这个,

你可能感兴趣的:(c语言常见面试题目及答案)