12个有趣的C语言面试题
作者:网络转载 发布时间:[ 2012/9/7 9:56:58 ] 推荐标签:面试
7、void*和C结构体
问:你能设计一个能接受任何类型的参数并返回interger(整数)结果的函数吗?
答:如下:
int func(void *ptr)
如果这个函数的参数超过一个,那么这个函数应该由一个结构体来调用,这个结构体可以由需要传递参数来填充。
8、*和++操作
问:下面的操作会输出什么?为什么?
#include<stdio.h>
int main(void)
{
char *ptr = "Linux";
printf("
[%c]
",*ptr++);
printf("
[%c]
",*ptr);
return 0;
}
答:输出结果应该是这样:
[L]
[i]
因为“++”和“*”的优先权一样,所以“*ptr++”相当于“*(ptr++)”。即应该先执行ptr++,然后才是*ptr,所以操作结果是“L”。第二个结果是“i”。
9、问:修改代码片段(或者只读代码)
问:下面的代码段有错,你能指出来吗?
#include<stdio.h>
int main(void)
{
char *ptr = "Linux";
*ptr = 'T';
printf("
[%s]
", ptr);
return 0;
}
答:这是因为,通过*ptr = ‘T’,会改变内存中代码段(只读代码)“Linux”的第一个字母。这个操作是无效的,因此会造成seg-fault或者崩溃。

sales@spasvo.com