前言
今天是五道基础的选择题,包含一些简单的小知识,希望对大能有帮助。
1.
题干
答案
A\C\D
知识点
本题考察的知识点有两个:宏定义和typedef重定义。
宏仅仅是将INT_PTR替换成int *
int *a,b其中,a的类型是int *而b为Int,因为其中的*会与a先结合
然而int_ptr不是去简单的替换,它类似于int *a,*b
这就是typedef与宏定义的区别,
(宏定义感觉很容易出错,之后会介绍一道类似的题)
2.
题干
答案
A\B
知识点
这题还挺有意思的,考察的是对于scanf参数以及数组名的理解。
我们都知道scanf函数传进去的参数应该是地址,也就是指针类型的变量 ,&b不用说,肯定是对的。
而数组名除了两种特殊的情况以外(一个是取地址、一个是在sizeof中单独出现的时候,此处不再作过多的说明)都指的是首元素的地址,在此处,我们可以看到,占位符是%s:打印字符串,所以无论是传进去首元素的地址还是数组的地址,都可以完成输入。
3.
题干
答案
B
知识点
这道题考察的就是对于宏定义的变量的理解
(宏定义在有些时候真的挺坑的)
宏只是单纯的替换
先把用到的所有地方对宏进行替换,先不考虑运算规则,
替换的过程:N 先替换 M 中的 N 得到 2 + 1
再用 M 替换 NUM 中的 M
小提示:使用宏定义的变量的话,建议使用()帮助自己理解
4.
题干
答案
C
知识点
很简单的一道题,放在这里就是复习一下static的使用,此处做一个static这个知识点的拓展
static:静态的
用法一:
static修饰局部变量
本质:使变量的存储位置发生了变化
注意:变量的作用域没变,无法出作用域使用 // 延长的是生命周期
局部变量:每次进入函数会重新创建,出了函数就会销毁(将空间还给操作系统)
存储在栈区,进入作用域自动创建,出作用域自动销毁
修饰之后:
局部变量出了作用域不会回收,延长局部变量的生命周期,如果反复调用函数,会出现累积的效果
存储在静态区,直到程序结束,变量才会被回收 // static所在代码在编译期间已分配地址,其代码行在运行时不再执行,即其地址不再变化
用法二:
static修饰全局变量
修饰后:
全局变量无法在其他源文件中被引用
使其只能在其所在的源文件内部使用
即使其外部链接属性变为内部链接属性(理解即可,不用深究)
用法三:
static修饰函数
函数不存在生命周期
修饰前:函数具有外部链接属性
修饰后:外部链接属性变为内部链接属性
函数只能在其所在的源文件内部使用,其他源文件无法使用
这样就能设多个函数,并且名字一样也不会冲突
这是我另一篇文章中的原话,在此引用一下
5.
题干
答案
D
知识点
A
考察结构体知识中的内存对齐,在此处我只能简单的说明(因为作者还没学会):结构体的大小,是大于等于其各个成员大小之和的,之后我会出一篇文章关于结构体的详细解释。
B
考察的是两个浮点型的数据如何比较
先解释为什么不能直接用a == 0.0来判断,
首先,我们都知道数据在内存中是以二进制的形式来存储的,由于浮点数十进制转化成二进制的机制,会造成精度损失,因此在浮点数的比较中,无法直接令两个浮点数是否相等来判断两个浮点数。
那么,如何比较呢,此处提供两个方法:
在介绍之前附上我另一篇文章的链接:
可能会对大家理解下面的方法有一些帮助
方法1
#include<stdio.h> #include<math.h> #define EPS 0.0000000001 int main() { double x = 1.0; double y = 0.1; if(fabs((x - 0.9) - y < EPS)) printf("Yes"); else printf("No"); }
当两个浮点数相减比一个很小的数还要小时,可认为两个浮点数相等
换句话说就是:在一定范围内,就认为两数相等
fabs函数
对于浮点型数据取绝对值,返回值类型是double
需要包含头文件<math.h>
方法2
#include<stdio.h> #include<math.h> #include<float.h> int main() { double x = 1.0; double y = 0.1; if(fabs((x - 0.9) - y < DBL_EPSILON)) printf("Yes"); else printf("No"); }
DBL_EPSILON
精度:分为自定义精度和系统精度
方法1使用的EPS就是自定义精度。
DBL_EPSILON就是系统精度,需要包含头文件
是最小的一个数
#include<float.h>
下图是DBL_EPSILON的定义
C
C选项就很简单了,a是数组名,存储的是首元素地址,还是char*类型的,只能存储一个字节大小的变量,hello world十四个字节只能存进去h,这个字符。
结语
这次整理的五道题就到这里了,个人感觉整理下来还是收获了很多呢,希望看完这篇文章的你也有所收获,我们下篇文章见~