C第三章 语言函数、基本数据类型、局部变量、表达式
- 程序执行过程
编译器将我们的程序编译成可执行文件,当我们运行程序的时候,操作系统会将我们的可执行文件,全部加载到内存,然后CPU从入口函数开始,在内存读一条指令,执行一条指令。 -
函数
对于C语言来说,我们都是在函数里面编写我们的执行指令,函数是我们C语言的指令的载体。
对于C语言来说,每一条指令语句,后面必须以分号结尾。
C语言函数的要素
y = f(x),y就是返回值,x就是参数,f就是整个函数的过程名称
如y = f(x) = a*x+b;这是直线方程,那么a*x+b就是函数体
C语言的函数跟数学函数类似,它有一下几个要素:
1.返回值类型
2.函数名称
3.函数体
4.函数参数
返回值 函数名称(参数1,参数2...)
{//函数开始
}//函数结尾
int main(int a,char**b){
}
函数返回 return 关键字,返回的数据要符合函数定义的返回值的类型一致。 -
基本数据类型
1.内存是存储数据与代码的地方,内存里面存的是二进制数据,如100111000..,二进制一位数据,我们称为bit,8个bit 位1Byte,16个bit位一个WORD(字),32个Bit位一个DWORD(双字).... - 2.存储空间秒速
单位为字节(8bit)
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
在计算机里面,K为1024,不是1000
3.基本数据类型
字符数据类型:存储英文数字符号的类型 char,1个字节(8bit);
存储16bit整数的数据类型:short 占 2 个字节 16bit;
存储32bit整数的数据类型:int 占 4 个字节 32 bit;
存储64bit整数的数据类型:long 占 8 个字节 64bit;
存储32bit浮点数数据类型:float 占 4 个字节 32 bit;
存储64bit浮点数数据类型:double占 8 个字节 64 bit;
不是任何数据类型 为void;void 不占内存,没有存储内存,void* 占内存,有内存
4.计算机的数据正负表示,又叫有符号数据类型
例如:+4,-4
例如用16bit,也就是用short来存储,-4,+4;
1:用最高位的一个bit表示正、负,1(负),0(正);
2:剩下15bit表示我们的数据,4 = 1 * 2^1 + 0*2^0;
所以4的二进制为100,15个bit表示4就是0000 0000 0000 100,接下来用最高的第16bit 来表示正负,0位正,1为负
+4 = 00000 0000 0000 100
如果是负数,那么要将剩下的15bit取反以后再加1
取反:0000 0000 0000 100 -> 1111 1111 1111 011
加1:1111 1111 1111 011 +1-> 1111 1111 1111 100
-4 : 1111 1111 1111 1100
5.无符号数据类型
对于有符号的数据,浪费一个bit来存储符号为,如果我们本身存的都是正数,没有负数,那么就没有必要浪费一个bit来存储符号,那么这种我们叫做无符号数据类型,在数据类型前面加上unsigned 就可以了 ;
如 unsigned char;
unsigned int;
unsigned long long; - 局部变量
1). 什么是变量
程序的执行过程中,实际上就是大量的数据运算,那么必然我们要存储这些数据,在C语程序设计里面的存储数据,我们称之为 “ 变量”
a. 用来存放数据的内存,我们把它叫做 变量
变量的本质是一块内存,那么这块内存看可以存储数据,我们还可以修改我们的数据,
变量就像是仓库一样,可以存放我们的货物,至于存放什么货物,由我们自己决定
int a = 4;// 存自己决定的
int a = 8; //数据是可变化的
常量:就是4、8,而变量就是存放指定的数据类型的存储空间;
这个空间存什么数据,都是由编程人员决定;
编译器把我们定义的数据(如 4)转换成二进制写到可执行文件里面
2). C语言定义变量
变量类型 变量名称 分号
3). 局部变量
在函数中定义的变量,称为局部变量,只在函数内部有效。 - 表达式
1). 赋值表达式,给一个变量赋值,往变量所在的内存里面存数据;
如:int a = 3;
float a = 3.0f;
double a = 3.0;
2). 加、减、乘、除、括号
int a = 3;
int b = 4;
int c = 6;
b = (a+b) * c/4;
3).逻辑运算
如果符合逻辑,条件成立,那么值为1,如不符合逻辑或条件不成立,值为0;
例如 int a = 3; (a > 1) ,a的值为3,本身大于1,所以为真,真值为1,也就是说(a > 1) 的值为1 ,又如,int a =0;(a > 1) 那么表达式的值为0,那么(a > 1) 运算的值为0;
逻辑运算符: - ascii码表
为什么要有ASCII码表?
我们的计算机,只能存储二进制数据,本身没有办法存放这些字符,但是,我们的语言等需要字 符,那么程序是怎么处理字符的呢?然后就一个规定,使用[0,127]的一个数值来表示一个字符(英 文字母,符号等),这样就会有一个对应关系,那么这个就是ASCII码表。
ASSCII码 A 65,在内存里面,‘A’,65到底有什么区别;完全没区别的,就是存放的是65的二进制,如果你把65当做数据,那么他就是65,如果你把65当做是一个字符,调用计算机图形学的编程,将我们的A的形状绘制到屏幕上,那么就是字符‘A’。
如果程序将 65 当做了字符,那么就把 65 对应字符绘制到屏幕上,如果程序把 65 当成一个数据字符串,绘制到屏幕上。
printf 格式化输出
1). 输出一串文字:printf("hello world\n");
2). 输出整数 printf(“a = %d\n”,a);//输出的时候,如果遇到是%d,那么就把a输出成整数
3). 输出浮点数
float a = 4.0f;
printf("a = %f\n",a);
4). 输出字符
char a = 'a';
printf("%c",a); - 程序心中有数
代码给CPU运行前,先在自己的脑袋里面运行一次,确保结果正确再给计算机,做到程序心中有数,不是瞎子摸象,这个是控制程序bug找出程序bug的唯一有效的方式