您的位置:首页 > 职场人生

C语言面试题

2015-08-01 18:43 1831 查看

一、 简答题

1. 程序的局部变量存在于(栈区)中,全局变量存在于(静态区)中,动态申请数据存在于(堆区)中。

2. 设有以下说明和定义:

typedef union {long i; int k[5]; char c;} DATE;

struct data { int cat; DATE cow; double dog;} too;

DATE max;

则语句 printf(“%d”,sizeof(struct date)+sizeof(max));的执行结果是:__32位系统下为(_52)在16位系统中 当double为4个字节时值为(26)

#include <stdio.h>

typedef union {long i;int k[5];char c;} DATE;
struct data{int cat;DATE cow;double dog;} too;

int main()
{
DATE max;
printf("struct  = %d \n union = %d",sizeof(struct data),sizeof(max));
return 0;
}
打印结果:struct = 32  union = 20


3. 32位系统下,请问如下语句的值

unsigned char *p1;

unsigned long *p2;

p1=(unsigned char *)0x801000;

p2=(unsigned long *)0x810000;

请问p1+5= 0x801005

p2+5= 0x810014

4. int i=10, j=10, k=3; k*=i+j; k最后的值是?

答:3*20=60

5. #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?

答:5*5+5=30

6. 下面程序的输出是_,为什么?

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL)

{

puts(“Got a null pointer”);

}

else

{

puts(“Got a valid pointer”);

}

答:输出Got a valid pointer;//得到一个有效指针

7. 以下程序运行后的输出结果是__

main()

{

char m;

m=’B’+32; printf(“%c\n”,m);

}

答:打印输出 ‘b’

8. 已有定义如下:

struct node

{

int data;

struct node *next;

} *p;

以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空p = (struct node *)malloc( _);

答:sizeof(struct node)

9. 在绝对地址0xXXXXXXXX上写入字符’a’的语句是[b]_[/b]。

答:char p = (char )0xXXXXXXXX;

*p = ‘a’;

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

答:#define SECONDS_PER_YEAR (((60*60)*24)*365)UL

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

答:#define MIN(a,b) (a >b)? b : a

12. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?

答:while(1){

;

}

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

a) 一个整型数(An integer)答:int a

b) 一个指向整型数的指针( A pointer to an integer)答:int *p;

c) 一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)答:int **p;

d) 一个有10个整型数的数组( An array of 10 integers) 答:int a[10];

e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers) 答:int *p[10];

f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)

答:int (*p)[10];

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)

答:int(*p)(int);

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers functions that take an integer argument and return an integer )

答:int (*p[10])(int)

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

答:static修饰函数时,其作用是限定函数的作用域为只在本文件使用

static修饰全局变量时,也是限定其作用域为本文件使用

static修饰局部变量时,修改其生命周期为程序编译时分配空间,程序结束时释放空间,其变量的存储位置是静态区;且static修饰的变量只初始化一次,后面再使用时该变量的值为上一次运行的值;

15. 关键字const的含义。

答:const修饰的变量为只读变量;

16. 关键字volatile有什么含意?并给出三个不同的例子。

答:当一些变量会发生意想不到的改变时,需要使用volatile修饰,告诉编译器在每一次使用该变量时,需从内存从新读取它的值,而不是使用寄存器里面的值

1、设备的状态寄存器

2、多线程编程中的条件变量

3、中断服务程序的?????

17. 一个参数既可以是const还可以是volatile吗?解释为什么

答:可以的,例如读设备状态寄存器变量时,用volatile修饰说明它的值会发生意想不到的变化,用const修饰说明程序员不应该试图去修改它的值;

18. 一个指针可以是volatile 吗?解释为什么。

答:可以;说明该指针指向的地址的值会发生意想不到的改变???????

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

int square(volatile int *ptr)

{

return ptr *ptr;

}

答:该函数返回的值有可能并不是我们期望的那样,因ptr是volatile修饰的,它的值随时会发生意想不到的改变;程序应该修改为:

int square(volatile int *ptr)



int a = *ptr;

return a*a;



20. 在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务.

答:

short * p = (short *)0x67a9;

*p = 0xaa66;

21. 局部变量能否和全局变量重名?

答:能,在函数内局部变量和全局变量重名时,局部变量会覆盖全局变量;

22. 如何引用一个已经定义过的全局变量?

extern int a;

23. 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答:可以,可以作为公共变量使用;????????????

24. 语句for( ;1 ;)有什么问题?它是什么意思?

答:没有问题;它是死循环的意思。????????????、

25. do……while和while……do有什么区别?

答:do{}while();它会先执行一次循环体,在判断循环条件是否满足

while(){;}它会先判断循环条件是否满足,若满足则近循环体,否则执行后面的语句;

26. 下列哪种方法更好,为什么?

define dPS struct s * dPS

typedef struct s * tPS;

dPS i,j;

tps a,p;

答:typedef会更好;dPS定义的i为struct s类型的指针,j为struct s类型的实体;而tps定义的a,p均为struct s类型的指针;

27. 下面的结构是合法的吗,如果是它做些什么?

int a = 5, b = 7, c;

c = a+++b;

答:合法的;c = (a++) + b;

28. 队列和栈有什么区别?

答:队列为先进先出,栈为先进后出;操作存储在内存中的数据的方法和方式不一样

29. 全局变量和局部变量是否有区别?如果有,是什么区别?

答:有区别;全局变量存储在静态区,其生命周期为程序编译时分配空间,程序结束时释放空间;其作用域为定义以下的区域全部有效;局部变量存储在栈区;其申明周期为函数运行时分配空间,函数运行结束是释放空间,其作用域只在
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: