2023年C语言精简笔记.docx
《2023年C语言精简笔记.docx》由会员分享,可在线阅读,更多相关《2023年C语言精简笔记.docx(45页珍藏版)》请在咨信网上搜索。
1、C语言1、 概述C语言的数据类型有:整型(int)、实型(float)、字符型(char)、数组类型(int )、指针类型(void *)、结构体类型(struct)、共用体类型(union)等C语言允许直接访问物理地址,可以直接对硬件进行操作,可以像汇编语言同样对位(bit)、字节和地址进行操作2、第一个函数分析 #include 是C语言的预解决指令之一,所谓预解决,就是在编译之前做的解决,预解决指令一般以 # 开头 #include 指令后面会跟着一个文献名,预解决器发现 #include 指令后,就会根据文献名去查找文献,并把这个文献的内容包含到当前文献中。被包含文献中的文本将替换源文
2、献中的 #include 指令,就像你把被包含文献中的所有内容拷贝到这个 #include 指令所在的位置同样一个C程序中一定会有一个main函数,也只能有一个main函数。main函数是整个C程序的入口。1.在编译前先执行#include指令,拷贝stdio.h的内容到源程序中2.编译源程序,生成目的文献3.链接C语言函数库,生成可执行文献4.运营可执行文献,在屏幕上输出Hello, World!3、函数C语言的函数可以大约分为3类:1. 主函数,也就是main函数。每个程序中只能有一个、也必须有一个主函数。2. 2.开发人员自定义的函数,可有可无,数目不限3. 3.C语言提供的库函数在标准
3、C语言中,函数的定义顺序是有讲究的,默认情况下,只有后面定义的函数才可以调用前面定义过的函数假如调换下sum函数和main的顺序,在标准的C编译器环境下是不合法的假如想把其他函数的定义写在main函数后面,并且main函数能正常调用这些函数,那就必须在main函数前面作一下函数的声明可以省略参数名称,如在大型的C程序中,为了分模块进行开发,一般会将函数的声明和定义(即实现)分别放在2个文献中,函数声明放在.h头文献中,函数定义放在.c源文献中运营环节分析:1 在编译之前,预编译器会将sum.h文献中的内容拷贝到main.c中2 接着编译main.c和sum.c两个源文献,生成目的文献main.
4、obj和sum.obj,这2个文献是不能被单独执行的,因素很简朴:*sum.obj中不存在main函数,肯定不可以被执行* main.obj中虽然有main函数,但是它在main函数中调用了一个sum函数,而sum函数的定义却存在于sum.obj中,因此main.obj依赖于sum.obj3 把main.obj、sum.obj链接在一起,生成可执行文献4 运营程序在定义函数时,函数名后面的()中定义的变量称为形式参数(形参);在调用函数时传入的值称为实际参数(实参)。4、 printf函数scanf函数 3个%d之间是用空格隔开的,我们在每输入一个整数后必须输入一个分隔符,分隔符可以是空格、t
5、ab、回车5、 基本数据类型在Java中,你声明了一个局部变量后,假如没有通过初始化赋值就使用该变量,编译器直接报错在C语言中,你声明看一个局部变量后,没有通过初始化赋值是可以使用的但这是很危险的,不建议这样做,b也许会是任意大整数假如是全局的int类型变量,系统会默认赋值为0char的取值范围是:ASCII码字符 或者 -128127的整数下面的写法都是错误的:有以下4种类型修饰符: short 短型 long 长型 signed 有符号型 unsigned 无符号型红色的代表常用的数据类型6、 基本语句C语言的基本语句跟Java中的差不多,所以,这里只是简朴地提一下 循环语句(do whi
6、le、while、for) 条件语句(if 、if-else、switch) goto语句7、 基本运算1、 算术运算符 + 加法运算符 - 减法运算符,或负值运算符 * 乘法运算符 / 除法运算符 % 模运算符,或称取余运算符,规定%两侧均为整型2、 关系运算符 小于运算符 大于运算符 = 大于等于运算符 = 等于运算符 != 不等于运算符3、 逻辑运算符 & 逻辑与运算符 | 逻辑或运算符 ! 逻辑非运算符4、 赋值运算符1.简朴的赋值运算符= :int a = 5;2.复合赋值运算符 += 加赋值运算符。如a += 3+1,等价于 a = a +(3+1) -= 减赋值运算符。如a -=
7、 3+1,等价于 a = a -(3+1) *= 乘赋值运算符。如a *= 3+1,等价于 a = a *(3+1) /= 除赋值运算符。如a /= 3+1,等价于 a = a /(3+1) %= 取余赋值运算符。如a %= 3+1,等价于 a = a %(3+1)5、 自增自减运算符 + 自增运算符。如a+,+a,都等价于a = a+1 - 自减运算符。如a-,-a,都等价于a = a-16、 逗号运算符,逗号表达式 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为: 表达式1, 表达式2, , 表达式n 逗号表达式的运算过程是:从左到右的顺序,先计算表达式1,接着计算表达式2,.
8、,最后计算表达式n * 整个逗号表达式的值是最后一个表达式的值+a的结果为3,a *= 2的结果为6,b = a * 5的结果为30。因此,输出结果为:7、条件运算符条件表达式其实就是三目运算符,一般形式为:表达式1 ? 表达式2 : 表达式38、Sizeofsizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。sizeof一共有3种形式 sizeof( 变量常量 ) sizeof 变量常量 sizeof( 数据类型 )注意,不可以写成sizeof float;8、 数组一维数组定义的形式为:类型 数组名元素个数 int a5;只能放在数组名的后面,下面的都是错误写法:里
9、面的个数必须是一个固定值,可以是常量(比如6、8)、常量表达式(比如3+4、5*7)。绝对不能使用变量或者变量表达式来表达元素个数,大多数情况下不要省略元素个数(当数组作为函数的形参和数组初始化时除外)下面的都是对的写法:int a5; / 整型常量int bA; / 字符常量,其实就是65int c3*4; / 整型常量表达式下面的都是错误写法:int a; / 没有指定元素个数,错误int i = 9;int ai; / 用变量做元素个数,错误定义数组时,系统将按照数组类型和个数分派一段连续的存储空间来存储数组元素,数组名代表着整个数组的地址,也就是数组的起始地址。如int a3 其实a不
10、算是变量,是个常量,它代表着数组的地址。a = &a0初始化的一般形式是:类型 数组名元素个数 = 元素1, 元素2, .;int a2 = 8, 10;其实相称于:int a2;a0 = 8;a1 = 10;注意的是:C语言中编译器是不会对数组下标越界进行检查的,所以自己访问数组元素时要小心元素值列表可以是数组所有元素的初值,也可以是前面部分元素的初值int a4 = 2, 5;当数组为整型时,初始化未拟定初值的元素,默认为0,所以上面的a2、a3都为0当对所有数组元素都赋初值时,可以省略元素个数int a = 2, 5, 7;说明数组a的元素个数是3数组初始化时的赋值方式只能用于数组的定义
11、,定义之后只能一个元素一个元素地赋值下面的写法是错误的:int a3;a3 = 1, 2, 3; / 错误a = 1, 2, 3; / 错误其实为什么是错误的写法呢?我们可以简要分析一下。1 第2行的a3代表着访问数组的第4个元素,一方面这里已经是数组下标越界了;就算没有越界,给a3赋值时也应当赋一个int类型的整数,不应当是。2 第3行的a是数组名,代表着数组的地址,它是个常量!给常量赋值,那肯定错了!一维数组的元素作为函数实参,与同类型的简朴变量作为实参同样,是单向的值传递,即数组元素的值传给形参,形参的改变不影响实参 假如一维数组的名字作为函数实参,传递的是整个数组,这样形参数组修改时,
12、实参数组也同时被修改了。形参数组的元素个数可以省略。二维数组定义形式:类型 数组名行数列数int a23; / 共2行3列,6个元素a0、a1也是数组,是一维数组,并且a0、a1就是数组名,因此a0、a1就代表着这个一维数组的地址按行进行初始化int a23 = 2, 2, 3, 3, 4, 5 ;按存储顺序进行初始化(先存放第1行,再存放第2行)int a23 = 2, 2, 3, 3, 4, 5;对部分元素进行初始化int a23 = 2, 3, 4 ;int b33 = , , , 2, 1, 2, 3;假如只初始化了部分元素,可以省略行数,但是不可以省略列数int a3 = 1, 2,
13、 3, 4, 5, 6;int a3 = 1, 2, 3, 3, 5, ;int a2 = 1, 2, 3, 4, 5, 6; / 错误写法二维数组会先存放第1行的元素,由于不拟定列数,也就是不拟定第1行要存放多少个元素,所以这里会产生很多种情况,所以只指定行数是错误的9、 字符串在C语言中,我们可以用字符数组来存储字符串。*字符串可以看做是一个特殊的字符数组,为了跟普通的字符数组区分开来,应当在字符串的尾部添加了一个结束标志0。0是一个ASCII码值为0的字符,是一个空操作符,表达什么也不干。所以采用字符数组存放字符串,赋值时应包含结束标志0。* 字符串mj的存储情况如下(假设用字符数组ch
14、ar a来存储):注意了,尾部有个0,假如没有这个结束标记,说明这个字符数组存储的并不是字符串字符串的初始化:当我们使用类似第3个的初始化方式时,系统会自动在字符串尾部加上一个0结束符字符串的输出我们可以使用stdio.h中两个函数来输出字符串,分别是printf和puts函数%s表达盼望输出一个字符串,因此printf函数会从b的首地址开始按顺序输出字符,一直到0字符为止,由于0是字符串的结束标记。同样puts函数会从a的首地址开始输出字符,一直到0字符为止。所以,假如想要创建一个字符串,记得加上结束符0,不然后果很严重,会访问到一些垃圾数据。puts函数输出一个字符串后会自动换行,puts
15、函数一次只能输出一个字符串,printf函数则可以同时输出多个字符串字符串的输入我们可以使用stdio.h中有2个函数可以用来接受用户输入的字符串,分别是scanf和gets gets跟scanf同样,会从a的首地址开始存放用户输入的字符,存放完毕后,系统会自动在尾部加上一个结束标记0。* gets一次只能读取一个字符串,scanf则可以同时读取多个字符串* gets可以读入包含空格、tab的字符串,直到碰到回车为止;scanf不能用来读取空格、tab字符串数组:10、 字符与字符串常用解决函数字符解决函数字符输出putchar():putchar(65); / Aputchar(A); /
16、Aint a = 65;putchar(a); / A上面的3种用法,输出的都是大写字母A。* putchar一次只能输出一个字符,而printf可以同时输出多个字符printf(%c %c %c, A, B, a);字符输入getchar():char c;c = getchar();getchar会将用户输入的字符赋值给变量c。* getchar函数可以读入空格、TAB,直到碰到回车为止。scanf则不能读入空格和TAB。* getchar一次只能读入一个字符。scanf则可以同时接受多个字符。* getchar还能读入回车换行符,这时候你要敲2次回车键。第1次敲的回车换行符被getcha
17、r读入,第2次敲的回车键代表输入结束。字符串解决函数:1.strlen函数strlen函数会从s2的首地址开始计算字符串的字符个数,直到碰到空字符0为止,不涉及02.strcpy函数strcpy函数会将右边的lmj字符串拷贝到字符数组s中。从s的首地址开始,逐个字符拷贝,直到拷贝到0为止。当然,在s的尾部肯定会保存一个0。* 假设右边的字符串中有好几个0,strcpy函数只会拷贝第1个0之前的内容,后面的内容不拷贝最后字符串s中的内容为:mj3.strcat函数char s130 = LOVE;strcat(s1, OC);strcat函数会将右边的OC字符串拼接到s1的尾部,最后s1的内容就
18、变成了LOVEOCstrcat函数会从s1的第1个0字符开始连接字符串,s1的第1个0字符会被右边的字符串覆盖,连接完毕后在s1的尾部保存一个0* 注意下面的情况char s130 = L, m, j, 0, L, o, v, e, 0;strcat(s1, OC);printf(%s, s1);第1行初始化的s1有2个0,通过第2行的strcat函数后,输出结果:4.strcmp函数* 这个函数可以用来比较2个字符串的大小* 调用形式为:strcmp(字符串1, 字符串2)* 两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不相同或者碰见0为止。假如所有字符都相同,
19、则返回值为0。假如不相同,则返回两个字符串中第一个不相同的字符ASCII码值的差。即字符串1大于字符串2时函数返回值为正,否则为负。char s1 = abc;char s2 = abc;char s3 = aBc;char s4 = ccb;printf(%d, %d, %d, strcmp(s1, s2), strcmp(s1, s3), strcmp(s1, s4);输出结果: s1和s2相同,所以返回0 s1和s3是第2个字符不相同,b的ASCII码值是98,B的ASCII码值是66,b - B = 32,所以返回32 s1和s4是第1个字符就不相同,a的ASCII码值是97,c的AS
20、CII码值是99,a - c = -2,所以返回-211、 指针通过变量名来直接引用变量,然后进行赋值:char a;a = 10;通过变量名引用变量,由系统自动完毕变量名和其存储地址之间的转换,称为变量的直接引用方式直接引用是直接通过变量名来读写变量C语言中尚有一种间接引用的方式(以变量a为例):一方面将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值。这就是间接引用。假如程序通过间接引用的方式来修改a的值,可以这样做:先根据 变量名b 获取 变量b 的地址ffc2,取出变量b中存储的内容ffc1,也就是变量a的地址,再根据变量a的地址f
21、fc1找到a的存储空间,然后修改里面的数据。总结一句:用来存放变量地址的变量,就称为指针变量。在上面的情况下,变量b就是个指针变量,我们可以说指针变量b指向变量a。指针的定义 一般形式:类名标记符*指针变量名;int *p;float *q;指针的初始化 1. 先定义后初始化 2. 定义时同时初始化指针变量是用来存放变量地址的,不要给它随意赋值一个常数。下面的写法是错误的3. 指针运算符 *1. 给指针指向的变量赋值2. 取出指针所指向变量的值4. 指针用途写一个函数swap,接受2个整型参数,功能是互换两个实参的值。默认情况下,一个函数只能有一个返回值,有了指针,我们可以实现函数有多返回值每
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 语言 精简 笔记
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。