嵌入式LINUX C学习之笔记(第一天)

2019-07-13 00:37发布

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的时候不能给变量赋初值