c语言部分笔记(此笔记为简记)
第一天、计算机基础知识
1、计算机五部分组成:运算器、控制器、存储器(内存、外存)、输入设备、输出设备
CPU只和内存打交道 外存的数据掉电不丢失
内存的数据掉电会丢失
(1)、提出计算机由五部分组成
2、计算机之父:冯诺依曼——> (2)、计算机的数据采用二进制存储
(3)、计算机中程序按照顺序执行
3、第一台电子计算机:1946年 艾伦图灵
4、C语言的标准由美国ANSI组织(美国国家标准协会)发布,所以最初也被成为ANSI C,
后面由ISO组织(国际标准化组织)制定和发布,目前一共有5套标准(C89,C99,C11,C17,C23)
5、美国标准国家协会ASCI设计出来一套编码规则 ASCII码,收录了128个字符,为了兼容其他国家,扩展到了256个字符
6、中国国家标准总局设计了中文简体字符集:GB2312字符集,后面推出了GBK编码,UTF-8收录了各个国家的字符.
7、常用的字符ASCII码:换行符 10, 回车符 13,字符0 48, 大写字母A 65,小写字母a 96
8、为了能存储ASCII码表中的任意字符,所以需要存储器中的8个电容。 电容:电子元件,具有充电放电的特性,容纳电荷
9、动态随机存储器(DRAM):常见设备 内存条
9、计算机处理数据的最小单位:bit 计算机处理数据的基本单位byte(字节)
10、存储器一般以一组电容(8bit)作为存储单元
第二天、程序框架分析
1、函数:可以重复使用的代码段
2、main函数需要有返回值必须是int整型,可以没有参数,返回值会最为exit函数的参数,程序总是从main函数开始运行
int main(viod){}
int main(int argc,char *argv[]){}
argc->的值是非负整数
*argv[]-> (1)、数组中的每一个元素都是一个指向字符串的指针
(2)、字符串应该由主机环境递给main函数,主机环境指的是Linux命令行终端
(3)、数组中第一个元素的字符串指的是程序的名字
(4)、数组中第二个元素到最后一个元素是传递给程序的参数
3、exit函数可以导致程序终止,只能调用一次。参数是0表示程序正常终止,如果是非0表示程序异常终止,exit的参数会提供给当前 程序的父进程
4、头文件的两种包含形式: < > " "
< >:直接从系统路径下进行查找,如果未找到,则编辑器提示错误
" ":先从当前路径下查找,如果没有则在系统路径下进行查找,如果未找到,则编辑器提示错误
第三天、C语言基本元素
1、C语言标准中常用关键字32个,并且全都是小写
2、计算机的存储器分为两种:RAM(随机存储器) ROM(只读存储器)
掉电数据丢失 掉电数据不丢失
3、32位系统/64位系统 指的是计算机的地址总线的位数,指的是计算机的寻址范围是32位,也就是4GB
4、常量:在程序循行期间值不会发生改变的量 ->一般情况下用宏定义的方式来实现常量的设计 #define
变量:在程序运行期间值可能发生变化的量 ->用户可以根据实际情况向kernel(内核)申请一块存储单元0
5、C语言不支持二进制输入,但是支持八进制、十进制、十六进制
6、在二进制数前面增加一个符号位 0:表示正数 1:表示负数
7、用二进制表示负数:原码->反码->补码 注:负数原码求反的过程中符号位是不变的
8、设计程序时,定义的变量如果是由符号的,则尽量避免写入超过变量范围的数值
9、浮点数的两种形式 十进制形式(3.14)和指数形式(3.14E2) 注:C语言标准中规定字符e/E的后面必须是整数,另外字符e/E的前面必 须有数字
第四天、输入,输出
1、'#'可以把对应进制的前导符进行输出 #o可以把八进制的前导符输出 #x可以把十六进制的前导符输出->0x
2、'-'可以用于数据对齐 '-'表示左对齐 (默认是右对齐),一般结合字段宽度使用
3、字段宽度:采用十进制,指的是待输出的字符串需要占用多少列
4、'.'表示精度,后面跟着一个可选的十进制数
5、hh指的是把整形转为字符型,h指的是把整形转为短整型,只针对输出而言,数据本身没有收到影响
6、大端存储:低地址存储高字节(ARM架构) 小端存储:低地址存储低字节(x86架构)
5、函数的四个步骤:头文件、函数原型、函数参数以及返回值
7、stdout 指的是标准输出 显示器
stdin 指的是标准输入 键盘
8、printf 把格式化字符串输出到显示器 返回值是传输的字符数量 如果失败发送,返回值是负整数
9、'%P'可以把存储单元的编号以十六进制的形式输出
10、fflush刷新缓冲区 fflush(stdout)刷新输出缓冲区
11、刷新缓冲区的情况:(1)、缓冲区满了 (2)、遇到'\n'时 (3)、手动释放 调用fflush
12、匹配字符 [] 例:scanf("%d",&buf); //用户通过键盘把字符输入到对应的数组中,如果程序只打算接收0-9,如果用户输入其他字符 则结束
13、C语言的单目运算符和三目运算符都是遵循右结合,还有双目运算符中的赋值运算符‘=’,其他的运算符都是左结合性
14、sizeof运算符的操作对象如果是一个表达式,则表达式不会参与运算
15、类型转换 :强制类型转换和自动类型转换 注:两个都是为了本次运算而进行的临时性转换,转换的结果也会保存到临时的内存 空间(栈空间),不会改变数据本来的类型或者值
第五天、操作符
1、位操作运算符:~ & ^ | << >> ~属于单目运算符 其他的是双目运算符
~:按位取反 对于二进制而言 0变1 1变0 例:~1101_1110 = 0010_0001
&:按位与 对于二进制而言 当两个bit同时为1,结果为1 当bit存在0,结果为0
|:按位或 对于二进制而言 当两个bit同时为0,结果为0 当bit存在1,结果为1
^:按位异或 对于二进制而言 当两个bit相同,则结果为0 两个bit不同,结果为1
<<:左移运算符,对于二进制而言 原则:高位舍弃,低位补零 0111_1010 << 3 -->1101_0000
>>:右移运算符,对于二进制而言 原则:底位舍弃,高位补零 0111_1010 >> 3 -->0000_0111
2、给定一个整形变量a,第一个设置a的bit 3,第二个清除a的bit 3。在以上两个操作中,要其他位不变
置位 bit=1 复位bit=0
a = (1 << 3) | 1; ---> a |=(1<<?);
a = (~(1<<3))& a; ---> a &=~(1<<?);
3、逗号运算符 运算规则:逗号运算符中的最后一个表达式的结果最为最终结果
第六天、语句
1、语句:是为了指定动作,如果没有特殊说明,语句是顺序执行。 块是语句和声明的集合,每个代码块都是独立的语法单元
语句的种类: 标签语句 case default
复合语句 {}
表达式语句 ;
选择语句 if() if()else() switch()
迭代语句 while() do while() for( ; ; )
跳转语句 goto语句 countinue语句 break语句 return语句
第七天、数组
1、Array 数组 :用户向内核申请一块地址连续的内存空间 空间大小:数据类型的大小数据数量(数组长度)
2、数组名称就是指向数组对象的指针,数组名表示数组第一个存储单元的地址
3、(E1 + E2)== E1[E2] 如果E1是数组名 E2是整形常量 则:E1[E2]等价于 E2[E1]
4、int buf[5]; (buf+1)指的是数组地址向后偏移一个元素对应的单元大小,也就是偏移了4字节 (&buf+1)偏移了(5*sizeof(int))个 字节
5、清空数组操作:bzero(数组名,数组长度) memset(数组名,填充数,数组长度)-->更灵活
6、数组初始化只能在数组定义的时候进行
第八天、字符数组和多维数组
1、如果数组的容量刚好和字符串中的有效字符的数量一致时,就会数组越界,因为字符串末尾有一个转义字符‘\0’,也需要占用一个 字节的存储单元
2、不管是几维数组,数组的定义规则:数组名 [元素数量] + 元素类型
3、buf[1][1] --> *( ( *(buf+1) ) +1)
第九天、指针
1、int *P=NULL; //对指针变量进行初始化,目的是防止野指针出现,为了避免段错误的
2、从下到上 : 保留区->代码段->数据段->堆空间->栈空间->内核空间(1G)
3、对指针变量的偏移,地址加一不表示存储单元向后偏移一个字节,而是向后偏移一个数据类型的字节长度
4、指针数组:数据类型 *数组名[元素个数];
5、二级指针:一个指针变量中存储的地址是另一个变量变量的地址 例:int data; int *P1 = &data; int **P2 = &P1;
第十天、函数
1、函数的返回类型可以是void挥着是一个对象类型,而不是数组类型
2、注意:如果函数有返回值类型,则函数内部的需要返回的数据的类型必须要和 函数的返回值类型一致,则需要在函数内部调用return语句实现。
3、C语言中函数都是独立的个体,不允许在一个函数内部定义新的函数,但是允许 在一个函数内部调用其他的函数!设计函数应该做到*低耦合,高内聚*!
4、函数遵循一个“先定义,后使用”原则,由于C语言中程序都是以函数为单位,并 且程序的入口是主函数main(),所以应该把用户自定义的函数定义在main()函 数之前,然后在main()函数中进行调用。
5、单向传递:只是把实参的值传递给函数作为参数,在函数内部对数值进行修改 是不会影响外部实参的!
6、如果不打算调用return语句,则可以选择把实参的地址作为参数传递给函数内 部,这样函数内部对地址中的数据进行修改,则函数外部的实参地址下的值也 会变化,只不过此时函数参数类型应该是指针才可以。
第十一天、函数声明周期
1、对于生命周期是指变量的生命周期,也就是变量从得到内存到释放内存的时间 就是变量的生命周期,程序中变量如果按照存储单元的属性分类,可以分为变 量和常量,也可以按照生命周期进行划分,可以分为全局变量和局部变量。
2、(1) 局部变量:在函数内部定义的变量或者在某个复合语句中定义的变量都称为 局部变量!
(2) 全局变量:在所有的函数外部(在所有复合语句外部)定义的变量就被称 为全局变量!
3、对于局部变量而言,作用域只针对当前局部变量的复合语句有效。
4、当全局变量的名称和局部变量名称相同时,则应该遵循*“就近原则”*,也就是应 该优先使用同一个作用域内的变量,如果该作用域中没有该变量,则可以扩大作用域。

浙公网安备 33010602011771号