《C语言深度剖析》笔记之C语言基础测试题

来源:互联网 发布:html5手机商城源码 编辑:程序博客网 时间:2024/06/11 20:04


C语言基础测试题

1. 代码输出:

void foo(void)

{

unsigned int a = 6;

int b = -20;

(a+b > 6) ? puts(">6") : puts("<=6");

}


结果输出: >6

解释:在计算过程中,会出现隐式类型转换, int 转换为 unsigned int , -20将被转化为一个很大的数字。因此a+b很大。


2. 关于指针与数组所占内存的问题:

int * p = NULL;

sizeof(p)  值为4

sizeof(*p) 值为4

int a[100];

sizeof(a); 值为400

sizeof(a[100]) 值为4

sizeof(&a)  值为4 

sizeof(&a[0]) 值为4 

int b[100];

void fun( int b[100]);

void fun( int b[100])

{

sizeof(b); // 值为4

}


3. volatile的作用:

本关键字表明变量是一个易变的变量,因此编译器在进行编译时,每次使用改变量的值时,都需要从内存中重新加载。

例如:

volatile int i = 0;

int j = i;

int k = i;

如果i变量没有加volatile关键字,则在编译时将j k的赋值进行优化,将同一个i值赋值给两个变量,一旦加入了volatile则在赋值

时重新访问内存,加载i的值。


4. 判断当前系统是Big_endian 还是 Little_endian,实用程序进行测试。

int CheckSystem()

{

union check

{

int i;

char ch;

} c;

c.i = 1;

return ( c.ch == 1);

}


By  Andy  2012-11-24

原创粉丝点击