1、整形和浮点型的存储方式不同,怎么存储就怎么取出来 ,char int short long存储方式一样 只是表示地范围大小不同 ,float和double是一样的只是方式有点不同,表示的精度不同。
不要用%f取出整形,也不要%d取出浮点型
char int short long分有符号和无符号 而浮点型 只有有符号没有无符号
2、void类型的函数和形参
在函数的返回类型和形参中使用void的意思是 调用该函数时不需要给它传递形参 返回值是void表示该函数不需要返回一个有意义的返回值,所以调用者也不要想着 去调用该返回值
void *的时候:void类型的指针 表示该指针一个void类型的数,void类型的数 既可以是char 也可以是float int等 只是我们目前不知道
3、类型转换
不同类型的变量是不能直接运算的 也就是说int和float类型不能直接加减运算
int a=3;float b=2.5 printf("%f
",a+b); 输出是对的 5.5 是编译器自己进行转换了 (隐式转换)
逐步分析:1、编译器发现a+b中两个变量类型不同,于是编译器会将两个变量进行隐式转换 转换成类型相同的 (会将a转换成float型,因为隐式类型转换默认朝精度更高得范围更大的方向转换) a在a+b这个运算中 a成了3.0 (但是在后面a还是3,其实并不是真的将a转换成了float类型,而是构造了一个临时变量将a转成了float类型的值)
a, b同上 int c=a+b; printf("%d
",c); 输出是5
逐步分析:编译器发现a,b类型不同,分析同上 得到5.5 但是赋值的时候发现5.5是float类型,c是int 型 因此会强制将5.5转换成int型 结果是5
4、c语言中原生没有bool类型 c++有
所以在C语言中bool不是关键字 C语言中如果需要bool类型 则就用 int 代替 (虽然有一点浪费啦,int 32bits )
#define TRUE 1
#define FALSE 0
在BOOL世界里 只有0是假,其他全部是真
switch(整形,字符或者表达式反正不能是浮点型)
可以用touch新建文件
5、局部变量和全局变量对比:
(1)局部变量你没有初始化的话值是随机的 全局变量的话整形是0
(2)全局变量分配在数据段上,局部变量分配在栈上
6、内存有四区:数据取,代码区,堆区、栈区
所谓数据段:存储的是数,像全局变量,静态变量就是存储在数据段,数据段是在程序运行前就准备好的,程序运行后就销毁的
代码段:存储的是程序代码,一般是只读的
栈 stack(先进后出):临时存放数据的区域
堆(动态):new出来的对象和malloc向内存申请的内存 就存放在堆中
6、register变量 register int a;
reigister是C语言的一个关键字 寄存器型变量 和普通的变量是一样的 ,特点是 该类型的变量被引用的速度是最快的的 (C语言承诺会在运行时将该类型变量尽量的放到寄存器中,不在内存中,速度就快了,普通的变量是放在内存中的)
7、全局变量的定义和初始化在MAIN函数运行之前发生的
8、在一个程序中,不管是同一个文件还是不同的文件,不能出现名字相同的函数。。一旦重复编译器就会报错。
因为编译器调用函数时是根据函数名来调用函数的,一旦重复,编译器就不知道调用的是哪一个了。
9、调用别的c文件的全局变量,只要在该c文件extern 一下该变量即可 (extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示
编译器遇到此变量或函数时,在其它模块中寻找其定义)
extern的时候不能给变量赋初值