C 语言 记录

来源:互联网 发布:阿罗不可能定理 知乎 编辑:程序博客网 时间:2024/05/29 04:45


最近看驱动下的代码,很多结构体,指针,感觉看起来很吃力,

是时候系统的补补了.


这是我的学习记录,看《C程序设计语言》第二版的,方便自己查阅,好捡起来.


如书本中所说,

只能用 \n 表示换行符 , 如果用程序中的换行代替 \n 会产生错误信息 .

printf("The number is %d", c );

int 与float 类型的取值范围取决于具体的机器,对于 int 类型,通常为16 位 , 取值范围在 -32768 ~ +32767 .

也有 32 位表示 int 的类型 ,float 类型通常为 32 位 ,至少有 6 个有效数字 ,取值范围在10(-38) ~ 10(+38)之间 . 


比如下面的语句:

 int number;

 int data = 20;

 number = 5 * data / 9 ;

但是不能直接:

 number = 5 / 9 * data ;

因为整数除法会执行舍位,结果中的小数会被舍弃,那么 5 / 9 结果为 0 .


常数中的小数点表明常数是一个浮点数 ,5.0 / 9.0 是两个浮点数相除 , 结果将不舍位 .

如果某个算术运算符的所有操作数均为整型 , 则执行整型运算 .

如果某个算术运算符有一个浮点型操作数 和 一个整型操作数 ,则在开始运算前整型转换为浮点型 .

不过即使浮点常量取的是整数值 ,在书写的时最好加上显式的小数点,可以强调其浮点性质,便于阅读 .


printf 的转换中 %3.0f 表明待打印的 浮点数 至少占 3 个位宽, 且不带小数点和小数部分 .

%.2f 表示待打印的浮点数的小数后有两位小数,位宽没限制 .


for(i = 0;i < 5; i++ ){      ;;;;;}

for(  1 初始化部分 ;   2 测试条件部分  ;   3 增加一个步长 ){      4 循环体;;;}

第一部分:初始化部分  仅在进入循环前执行一次

第二部分:是控制循环的测试或条件部分,如果为真,则执行4 循环体, 此后再执行第三部分

如果为假,则循环终止.


在程序中使用像 300,20  这样的幻数 不是一个好习惯,

#define  名字  需要替换的文本

eg: #define Lower  20   

记住  末尾没有分号 .


文本流  是由多行字符构成的字符序列,而每行字符则由0个或多个字符组成,行末是一个换行符.


int c;

c = getchar() != EOF

等价于:

c = (getchar() != EOF)

c将被置为0或者1;

因为 != 的优先级比 = 高


如何区分文件中有效数据与输入结束符的问题,C语言中解决办法是在没有输入时,getchar 函数将返回一个特殊值,  EOF (end of file  文件结束)

它定义在<stdio.h>中  是一个整型数,  所以我们在接收字符的时候声明一个  int c .


''  单引号中的字符   表示一个整型,我们称之为字符常量,它不过是最小的整型数的另一种写法,

例如  ‘A’   在 ASCII 码中的值为65,  这样表示只是更加清楚,与特定的字符集无关.


单引号  ‘\n’ 代表换行符在值  在 ASCII 码中 其值为 10 ,在表达式中它不过是一个整型数。

双引号 “\n” 是一个仅包含一个字符的字符串常量.


赋值结合次序是由右至左 .


形式参数   和   实际参数 

形式参数:函数定义中圆括号内列表中出现的变量 .

实际参数:函数调用中与形式参数对应的值 .


地址就是指向变量的指针。而被调用函数则需要将对应的参数声明为指针类型,并通过它间接访问变量 . 


当把数组名用作参数时, 传递函数的值是数组起始元素的位置或地址------ 它不复制数组元素本身


变量 先  定义  再才可以 声明.

外部变量的定义必须指定数组的长度 , 但 extern 声明 则不一定要指定 .

外部变量的初始化只能出现在其定义中 .



原创粉丝点击