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、当全局变量的名称和局部变量名称相同时,则应该遵循*“就近原则”*,也就是应 该优先使用同一个作用域内的变量,如果该作用域中没有该变量,则可以扩大作用域。

posted @ 2025-11-20 18:56  people121  阅读(7)  评论(1)    收藏  举报