目录
补充EOF的作用(本人也是复习了一遍才知道,建议读者看看,研究研究)
函数
函数这一块比较简单,会写就行。
数组
概念
数组的概念—— 数组中可以存放一组相同类型的元素
数组—— 一组相同类型元素的集合
浅要的讲解一下基础知识
int arr[3]={1,2,3};
创建和初始化;
int arr[10] ={1,2,3};//不完全初始化,剩余的默认初始值为0;
char ch[5] ={'a','b','c'};//不完全初始化,剩余默认初始值为 \0。
通过下标访问元素
操作符
简单的一些
/ 除号两端如果都是整数,执行的是整数除法
/ 除号的两端至少有一个数是浮点数,才能执行浮点数的除法
% 叫做 取模 或则 取余
% 操作的两个数必须是两个整数
%f—— 打印float类型的浮点数
%lf—— 打印double 类型的浮点数
在用于输出时:
float类型可以使用%lf格式,但不会有任何好处。
double类型如果使用了%f格式可能会导致输出错误。
(printf中一般可以用%f代替%If)
在用于输入时:
double类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。
(scanf中%lf与%f是严格区分的)
sizeof
用途
在此可以思考一下与strlen的区别;
++类 --类
++:
这里不过多的做出说明,很简单。
强制类型转化
形如:(类型) 如下所示
int a = (int )3.14;//这里支取整数部分,意思是a为3;
不做过多的解释,太基础。
逻辑操作符
逻辑与: &&
逻辑或:||
(只关注真假)
关键字
基本关键字
补充EOF的作用(本人也是复习了一遍才知道,建议读者看看,研究研究)
在这里补充一点:
在键盘上按CTRL+Z可以使scanf读取失败。
这里为什么会有三个 ^z 咧,可能是因为visual编译器的原因
sacnf函数读取失败的时候会返回EOF
如果读取正常的话,返回的是读取到的数据的个数
register -寄存器
建议编译器见此数据放置在寄存器中,提高程序的效率,
不过现在几乎不用关心这个问题,因为现在的编译器都非常的高级,会自动分析。
typedef -就是类型重命名
static—— 静态
三种用法:
修饰局部变量
修饰全局变量
修饰函数
这里更加直观的表现了static的作用,上下图可以比较的进行分析:
本质就是内存。
在内存上,存在着三个部分,栈区,堆区,静态区:
注意:这里写的是static修饰局部变量
普通的局部变量是放在栈区上的,这种局部变量进入作用域创建,出了作用域释放。
但是局部变量杯static修饰后,这种变量就放在静态区,放在静态区的变量,创建好后,直到程序结束才释放。
总结:
static的修饰改变了局部变量的存储位置,因为存储位置的差异,使得执行效果不一样。
放在静态区的数据创建后指导程序结束才释放。
当切记,不会影响作用域。只是生命周期发生了变化。
下面再此的基础上,再次进行探讨
static修饰全局变量
上面引起不能用其他源文件中的变量的原因如下:
链接属性问题-static
全局变量本省是具有外部连接属性的
在A文件中定义的变量,在B文件中可以通过(链接)使用
但是如果全局变量被static修饰,这个外部链接属性就变成了
内部链接属性,这个全局变量只能在自己所在的源文件内部使用
static 的修饰,会把外部链接属性变成内部链接属性,最终使得全局变量的作用域变小
在这个补充一个知识,如dog.c文件 _经过 编译 链接 后就变成了,可执行文件 .exe
只有全局变量才讲链接属性。
#define宏的定义
上次简单的讲解一下#define
是这次讲解一下 ,有关于#define 宏的运用如下:
指针(即地址)
这里浅浅的讲解一下:
首先要理解内存
内存是计算机上的一种存储空间
程序运行的时候会载入内存
程序中如果有数据需要存储也会申请内存空间
-
指针变量:
指向地址(指针)的变量。
原理:
上面的知识有的相关部分,我都只是简单的提一下,在后续的文章中,在进行详细的相关知识讲解。
如有问题,望能指出,评论区交流。