C语言要注意的一些小细节

C语言笔试题容易忽略的一些细节

    今天的笔试虽然很简单,但是有些地方考察的很细。平常不注意看很容易忽略。所以基础很重要。

    问题一:关于#include <*.h> 与#include "*.h"的说法错误的是:()

(A)#include <*.h>只搜索系统路径

(B)#include "*.h"只搜索用户文件

(C)#include "*.h"先搜索用户文件,再去系统路径搜索

(D)两者可能等价

    注解:题目本意大概是这样。(B)

带"" 意思是表示先在当前程序所在的目录查找所包含的文件,,如果没有就查找系统文件。

带<>是只直接调用系统文件,而不去查找目录所包含的文件。

所以一般调用系统头文件都是用<>这样速度更快,用户的头文件就用""。

问题二:内存对齐

struct

{

  short s; 

  char c;

  float f;

}cs;

sizeof(cs),这道题出题人给的选项居然没有正确答案。应该是8,(2+1)+1+4=8。当时想着都要向4字节靠齐,4+4+4=12。

问题三:引用与指针的区别

从根本理解,引用是变量的别名;指针是指向变量的地址。详细的话可以从下面三点考虑:

引用的规则:

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。

(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。

(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

问题四:运算符优先级

a&b>>2:分不清&还是>>优先级高。优先级记忆方法:

     去掉一个最高的,去掉一个最低的;

     剩下的是一、二、三、赋值;

     双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。

问题五:隐式类型转换

   已知:int a=2,b=4,c=3;下面与a+b+c(=9)值不相等的项为:BC 
   (A)(a+b)*c/2 (=9)   (B)1/2*(a+b)*c (=0)  (C)c/2*(a+b) (=6)

问题六:前自增后自增与左值、右值

  在C++中,为什么前自增操作生成左值,后自增操作生成右值?为什么有这样的区别?

  前自增返回的就是自增后的“自己”(引用),而后自增返回的是自增前“自己的副本(临时变量)”。

  前自增操作先对对象本身操作,然后返回对象本身,一般返回引用,可以被赋值;
  后自增操作一般用一个临时变量保存对象,然后对对象操作,返回临时变量,这个临时变量一般来说是右值,不能修改

  


以后慢慢汇总。。。。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值