C语言预习

1、什么是栈?

栈是一种只能在一端进行插入或者删除操作的线性表(说明栈还是线性表结构,只是操作受限而已)。其中允许进行插入或者删除操作的一端称为栈顶。栈的插入和删除一般叫入栈和出栈。栈的顺序存储结构叫做顺序栈,栈的链式存储结构叫做链栈。

栈是一种数据结构,可以用来实现函数的调用。

2、文件包含中重复包含,编译是否会显示出错?

当重复包含头文件,有可能会出现重复定义变量,编译器在进行编译的时候对于重复定义的变量不知道调用哪一个。比如定义了int a=0;又重复定义了int a=1;如果使用这个a,编译器就不知道使用的a等于0还是1,所以编译器不允许出现重复定义,也就不允许重复包含头文件。上面的问题无法通过边缘,容易解决。如果写法不好,造成不被编译发现的问题才是头大,例如:在头文件中定义了全局静态变量,编译后实际在每个引用此头文件的obj中都会有一份,逻辑就混乱了。

3、条件语句和条件编译的区别在哪?

条件编译是C语言中预处理部分的内容,它是编译器编代码时最先处理的部分。条件编译里面有判断语句,如#if,#else,#endif。它的意思是如果宏条件如果符合,就编译这段代码,否则,编译器就忽略这段代码而不编译。

if语句则不然,ifC语言中的关键字,它根据表达式的计算结果来决定执行哪个语句,它里面的每个分支都编译过了的。

简单点讲,条件编译是根据宏条件选择性编译语句,它是编译器在编译代码时完成的

条件语句是根据条件表达式选择性地执行语句,它是在程序运行时执行的。 

4、token是什么?

  预处理运算符##为宏扩展提供了一种连接实际变元的手段如果替换文本中的参数用##相连,那么参数就被实际变元替换,##与前后的空白符被删除,并对替换后的结果重新扫描。

例如:#define paste(front,pack) frong##pack

从而宏调用paste(name,1)的结果是建立单词name1

5、对于宏定义需要注意哪几点?

  1)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不做任何检查,如有错误,只能在编译已被宏展开后的源程序时发现。

  2)宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。  

  3)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。

  4)宏名在源程序若用引号括起来,则预处理程序不对其进行宏代换。

  5)宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。

  6)"输出格式"作宏定义,可以减少书写麻烦。

6、什么是结构体?

Struct是个神奇的关键字,他将一些相关联的数据打包成一个整体,方便使用。在网络协议、通信控制、驱动开发等地方,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。

7、结构体和数组的比较

  1)都由元素组成。

  2)各个元素在内存中的存储空间是连续的。

  3)数组中各个元素的类型相同,而结构体中的各个元素的数据类型可以不相同。

 

 

8、引用结构体成员的方法。

(1) 结构体变量名.成员名

(2) 结构体指针变量->成员名

(3) *结构体指针变量).成员名

(4) 结构体变量数组名.成员名

9、结构体和联合体的区别?
structunion都是由多个不同的数据类型成员组成的,但在任何同一时刻,union中只存放一个被选中的成员,而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的,一个struct变量的总长度等于所有成员长度之和;在union中,所有成员不能同时占用它的内存空间,它们不能同时存在,union变量的长度等于最长的成员的长度。

对于union的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于struct的不同成员赋值是互不影响的。

10、位段占多少字节?

如果一个位段结构中只有一个占有0位的无名位段,则只占10字节的空间,否则其他任何情况下,一个位段结构所占的空间至少是一个位段存储单元的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值