zoukankan      html  css  js  c++  java
  • C程序设计语言阅读笔记

    C程序设计语言阅读笔记

    一、导言

    1. 一个程序从无到有,经历的阶段有编写程序文本、编译、加载、运行。
    2. 在C语言中,所有的变量都必须先声明再使用,声明一般放在函数的起始处。
    3. int 通常为2个字节,16位,long通常为4字节,32位,一般来说, short <= int <= long
    4. 整数作触发操作时,其小数部分会被省略,例如9 / 5 = 1,小数部分被省略了。但是9.0 / 5 则会得到浮点数。
    5. 打印时候,%6d,6表示至少占6个字符宽,%6.2f表示,至少占6个字符宽,且保留2位小数。%o 表示八进制数, %0x 表示十六进制。
    6. #define 定义符号常量时候,是没有括号的。
    7. 形式参数: 函数定义中圆括号内列表中出现的变量,
    8. 实际参数: 函数调用中与形式参数对应的值
    9. 函数原型:int power(int m, int n);函数原型必须与函数的定义和用法一致。在函数原型中,参数名是可选的。
    10. 在C语言中,函数的参数是传值调用,即传递给被调用函数的参数值是存储在临时变量中的。
    11. 字符数组中,即字符串中,sizeof是实际占有的空间,strlen是指的是字符串的长度,实际占有的空间会比字符串长度大1,因为字符串结尾会补。
    12. 局部变量(自动变量):定义在函数中,不能被其它函数直接访问,自动变量如果没有复制,则其中存放的是无效值,即不知道他是什么值
    13. 外部变量定义在函数之外,且只能被定义一次,定义后,由编译程序为其分配空间。声明外部变量时候,可以用extern,外部变量为自动初始化为0
    14. 声明时只是说明变量的类型,而定义除了说明类型,还会分配空间。

    二、类型、运算符与表达式

    1. 对象可以用const(常量)类型,表示其值是不能修改的
    2. 在传统的C语言中,变量使用小写字母,符号常量使用大写字母
    3. long类型的常量以l或L结尾,无符号数则用ul或UL,float用f或者F结尾,前缀为0则为八进制,0x为十六紧张。
    4. 转移字符,a, 等、ooo,o代表1-3个八进制的数字,xhh,h代表一个或者多个十六进制数。
    5. 常量表达式,只包含常量的表达式。
    6. const限定符指定的变量的值不能被修改,其指定的数组所有元素的值不能被修改。
    7. 类型转换: 自动转换,窄到宽,不会丢失信息。例如在计算a+b时,如果a为浮点型,b为int型,则会把b转换为float后再进行加法。
    8. & 按位与,一般用于置某位为0, | 按位或,一般用于某位置1,有符号数右移时候用符号为进行填充左边,无符号数用0填充。

    三、控制流

    好像没啥可记下来的

    四 函数和程序结构

    1. 外部变量的初始化只能出现在其定义中
    2. 头文件,我们可以把共享的部分集合在一起,这样就只需要一个副本。在需要使用该头文件时,用#include包含即可。
    3. static,静态变量,static作用于外部变量和函数时,可以将其声明的对象限定在当前文件中,这样就无法被其它文件调用,当static修饰自动变量(局部变量)时,它的值一直存在,且只要在第一次进入程序时被初始化一次。
    4. 寄存器变量,使用频率较高的变量。 register int x。编译器可以忽略过量的或者不支持的寄存器变量,并且他的地震是不能被访问的。
    5. 未进行显示初始化时,外部变量和静态变量都回被初始化0,
    6. 数组的初始化可以在声明的后面紧跟一个初始化表达式列表 int num[] = {1,2,3,4,5},当忽略数组的长度时,编译器会把花括号中初始化表达式的个数作为数组的长度,当初始化表达式个数 < 数组的元素时,剩余的元素会被初始化0.
    7. 预处理器
    # include  //文件包含,可以用“”,也可以用<>
    # define 名字 替换文本, //宏替换。当参数名以#作为前缀时,则会被转化为字符串
    # undef // 可以取消名字的宏定义
    #if ... #endif 
    
    

    五、指针和数组

    1. 指针是能够存放一个地址的一组存储单元,一般是两个或者四个字节。
    2. 一元运算符&可用于取一个对象的地址
    3. p = &c,把c的地址赋值给变量p,此时p为指向c的指针。
    4. 一元运算符*是间接寻址或间接引用运算符。
    5. 指针只能指向某种特定类型的对象,每个指针都必须指向某种特定的数据类型,void类型的指针除外。
      • 和 & 比算术运算符的优先级要高
    6. (ip)++的括号不能丢,因为和++需要遵从从右到左的结合顺序。
    7. 用指针访问数组时,比用下标访问快,因为用下标访问也会转成指针进行访问。
    8. 数组名代表的是该数组最开始的一个元素的地址。
    9. 对指针有意义的初始化值只能是0或者表示地址的表达式
    10. 如果指针p和指针q指向同一个数组的成员,那么他们可以进行== != < >=的关系比较,指向不同数组的元素的指针直接的算术或者比较运算没有定义。
    11. 字符串常量占据的存储单元数会比字符数大1,因为会加结尾。
    12. char *p = "now is the time", 这时p指向一个字符串常量,他可以被修改指向其他的变量,但是无法修改字符串的内容是不行的。
    13. 指针数组是数组,他的元素是指针,例如int *num[5],num是一个含有5个元素的数组,他的元素是指向int的指针
    14. 二维数组实际上是一种特殊的一维数组,它的每个元素都是一个一位数组。
    15. 把二维数组作为参数进行传递时,必须在声明中指明列数,行数没有关系。
    16. 与二维数组相比,指针数组的好处在于每一行的元素可以不同。

    六、结构体

    1. typedef 声明并没有创建一个新类型,他只是给一个村庄的类型增加一个新的名词
    2. typedef 是由编译器进行解释的,因此处理能力比预处理器强
    3. 联合中,长度为其中类型的最大值

    七、输入和输出

    1. 在标准输入输出中,回车符和换页符都会被转化为换行符
    2. 可以使用 < 来实现输入重定向,> 实现输出重定向
    3. 可以通过管道重定向输出到另外程序的输入中,例如peo | anotherprog
    4. 格式字符串包括两种类型的对象:普通字符和转换说明,默认靠右对齐,使用-时靠左对象,小数点之前表示宽度,小数点只会表示精度。
    5. sprintf 会将结果保存到string中,而不是打印。
    6. 文件访问时,必须有借有还,及时释放
  • 相关阅读:
    postfix发信提示 Error: too many connectino from
    postfix 设置邮件头翻译,本域邮件不进行邮件头翻译,仅发送至外网的进行邮件头翻译?
    postfix 如何设置邮件头翻译的功能
    postfix 如何设置邮件头翻译的功能
    Oracle VM VirtualBox如何设置网络地址转换NAT
    python提取百度经验<标题,发布时间,平均流量,总流量,具体的链接>
    css 需要阴影的效果
    django POST表单的使用
    Vim中如何使用正则进行搜索
    Nginx 如何设置反向代理
  • 原文地址:https://www.cnblogs.com/xmxj0707/p/9726553.html
Copyright © 2011-2022 走看看