C语言常用面试题_2015.5.6(2)

1.分别给出BOOL,int,float,指针于零值进行比较的if语句

BOOL型:if(!var)

int型:if(var==0)

float型:const float tmp=0.00001; if(var>=-tmp && var<=tmp)       浮点型变量并不精确,所以不可以用“==”“!=”与数字进行比较,if(var==0.0)为错误书写方式

指针型:if(var==NULL)


2.一个32位程序,计算sizeof的大小

void func(char str[100])

{

sizeof(str)=?

}

void *p=malloc(100);

sizeof(p)=?

答案是4,4

func(char str[100])函数中,数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,沦为普通指针,失去了常量特性,可以做自增、自减操作。


3.宏的正确写法,把参数都用括号括起来,后面没有分号,不是C语言执行语句

#define min(x,y)  ((x)>(y)?(x):(y))

宏只是进行名字替换,不是真正的函数,在参数调用时会产生副作用,在参数自增或自减时也会产生副作用


4.为什么标准头文件中经常有这样的代码?

#ifndef _INCvxWorksh

#define _INCvxWorksh


#ifdef _cplusplus

extern "C" {

#endif

/*...*/

#ifdef _cplusplus

}

#endif


#endif

答:

#ifndef _INCvxWorksh

#define _INCvxWorksh

#endif  是防止被重复引用。

作为面向对象的编程语言,C++支持函数重载,面向过程的C语言不支持,为了实现C和C++的混合编程,提供了extern  “C”来解决名字来解决名字匹配问题,函数名称前加上extern  “C”,编译器就会按照C语言的编译方式来编译该函数,这样C语言就可以调用C++的函数了。


5.说出static和const尽可能多的应用

static:

修饰局部变量,作用域限于函数体内,生存期为整个程序生命周期;

修饰全局变量,作用域限于该源文件,不能被其他外部文件调用;

修饰函数,作用域限于该源文件,不能被外部文件调用;

const:

定义时需要初始化,一旦定义,不可修改,在内存的常量区存放;

对指针来说,可以指定指针为常量类型,或者其所指向内容为常量,或者两者都为常量;

函数声明时,修饰形参,表明其值不可修改;


6.试写一个C语言函数,若处理器是Big_endian,返回0,若是Little_endian,返回1

#include <stdio.h>

int checkCPU()

{

    union{

        int a;

        char b;

    }data;

    data.a=1;

    return (data.b==1);

}

int main()

{

    printf("%d\n",checkCPU());

    return 0;

}

小端模式的CPU,对操作数的存放顺序是从低字节到高字节,先存放低字节,再存放高字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值