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++中,为什么前自增操作生成左值,后自增操作生成右值?为什么有这样的区别?
前自增返回的就是自增后的“自己”(引用),而后自增返回的是自增前“自己的副本(临时变量)”。
前自增操作先对对象本身操作,然后返回对象本身,一般返回引用,可以被赋值;
后自增操作一般用一个临时变量保存对象,然后对对象操作,返回临时变量,这个临时变量一般来说是右值,不能修改。
以后慢慢汇总。。。。。。