(word)c语言面试题
C 语言面试题
1、局部变量能否和全局变量重名?
答: 能, 局部会屏蔽全局。 要用全局变量, 需要使用"::" ;局部变量可以与全局变量同名,
在函数内引用这个变量时, 会用到同名的局部变量, 而不会用到全局变量。 对于有些编译器而言, 在同一个函数内可以定义多个同名的局部变量, 比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?
答: extern 可以用引用头文件的方式, 也可以用 extern 关键字, 如果用引用头文件方式
来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错 ,
如果你用 extern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连
接期间报错。
3、请写出下列代码的输出内容
#include
int main(void)
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;
}
答:10,12,120
4、 程序的局部变量存在于(堆栈) 中, 全局变量存在于 (静态区 )中, 动态申请数据存在
于( 堆)中。
7、设有以下说明和定义:
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 data)+sizeof(max));的执行结果是:___52____
考点:区别 struct 与 union.(一般假定在 32 位机器上)
答:DATE 是一个 union, 变量公用空间. 里面最大的变量类型是 int[5], 占用 20 个字节.
所以它的大小是 20. data 是一个 struct, 每个变量分开占用空间. 依次为 int4 + DATE20 +
double8 = 32. 所以结果是 20 + 32 = 52. 当然...在某些 16 位编辑器下, int 可能是 2
字节,那么结果是 int2 + DATE10 + double8 = 20
5、写出下列代码的输出内容
#include
int inc(int a)
{ return(++a); }
int multi(int*a,int*b,int*c)
{ return(*c=*a**b); }
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
FUNC1 p=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%dn",*arg2);
}
main()
{
int a; //局部变量 a 为 0;
show(multi,10,&a);
return 0;
}
答:110
6、请找出下面代码中的所有错误 (题目不错,值得一看)
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
#include"string.h"
main()
{
char*src="hello,world";
char* dest=NULL;
int len=strlen(src);
dest=(char*)malloc(len);
char* d=dest;
char* s=src[len];
while(len--!=0)
d++=s--;
printf("%s",dest);
return 0;
}
答:
一共有 4 个错误;
int main()
{
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为分配一个空间 char* d = dest;
char* s = &src[len-1]; //指向最后一个字符
while( len-- != 0 )
*d++=*s--;
*d = 0; //尾部要加’\0’
printf("%sn",dest);
free(dest); // 使用完,应当释放空间,以免造成内存汇泄露
dest = NULL; //防止产生野指针
return 0;
}
7.对于一个频繁使用的短小函数,在 C 语言中