C语言笔试题记录

    最近要开始找工作了,也打算看看C语言笔试的一些题目了,这些题目还是有点意思的,因为往往是我们初级程序员经常犯的错误BUG;

(1) 布尔值 :测试BOOL flag变量是否为真.应该这样:

        if(flag);或者if(!flag);

(2) float :测试float flag变量是否为0.应该这样:

          const float EPSINON = 0.00001;

         if ((x >= - EPSINON) && (x <= EPSINON));

(3)NULL:测试char *p 变量与“零值”比较.应该这样:

     if(p==NULL);或者if(p!=NULL);不使用if(P==0,p!=0,p,!p)等等;就机器内部而言,NULL指针可以不同。在这种情况下,编译器负责将零值和内部值之间的翻译转化;

(4) const 有什么用?

      定义常量;

      修饰函数的参数和返回值,被修饰的东西收到强制保护,防止意外变动,提供健壮性;

(5)  指针传递问题,若想要引用传递,而不是值传递,那么传入的一定是地址,要么是指针本身的地址,要么是变量的地址;

 

(6)指针和引用的区别:

    引用必须别被初始化,指针不必;

    引用初始化以后不能被改变,指针可以;

    不存在指向空值的引用,指针可以改变所指的对象;

(7)  全局变量和局部变量在内存中是否有区别?

    全局变量存在静态数据区,局部变量在堆栈区;

栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等

堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序 结束时可能由OS回 
  收

栈是一种线性结构,堆是一种链式结构;堆栈一般是指栈;

(8) printf计算参数时是从右到坐压栈的;

*(prt++)+=123;按照++规则,这里为先引用再++,所以为*ptr=*ptr+123;ptr++;

 

(9)  char str[]="Hello";

       char *p=str;

       int n=10;

 那么计算sizeof(str)=6;sizeof(p)=4;sizeof(n)=4;

void Func(char str[100])

{

   sizeof(str)=4;

}

void *p=malloc(100);

sizeof(p)=4;

struct ALIGN

{

     char a;

     int b;

     char c;

}A;

sizeof(A)=12;

struct ALIGN

{

   int b;

   char a;

   char c;
}B;

sizeof(B)=8;

#program pack(1)

#program pack()可以禁止对其调整

strlen()函数的参数只能是char *类型的

(10) 对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如 int f1(){return 0;},sizeof(f1)=sizeof(int)=4;

       空类所占空间为1,单一继承的空类空间为1,多重继承的空类空间还是1,但是虚继承涉及到虚表一,所以为4;

(11) 内联函数和宏定义的区别

        内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌到目标代码中。而宏只是一个简单的替换。内联函数要做类型参数检查。

        inline fac(float i) {return i*i};//没有写返回值

        printf("bb=%d\n",fac(8))://调用的时候执行的是printf("bb=%d",8*8);

(12) 指针和引用的区别

        答:非空,指针可以为空,引用不行;引用总是指向初始化时候的对象,指针可以改变。引用总是指向一个对象,并且不会改变。

(13)const 常量定义的时候必须初始化,const常量指针定义的时候也必须有指向对象;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值