C语言
安冉冄先森
这个作者很懒,什么都没留下…
展开
-
C语言 动态内存 malloc calloc realloc free
* 局部变量:在函数内部定义的变量* 全局变量:在函数外部定义的变量* 栈stack:局部变量,函数调用 1M左右* 如果需要的数组(内存)超过1M怎么办?* 如果需要变量作为数组的长度,在VS编译器是非法的,怎么办?* 上面的问题都可以通过动态内存解决* 创建动态内存: 分配区域在"堆(heap)",2G左右,很大,必须掌握,在数据结构中大量使用* malloc: 参数"需要创建的内存大小,以字节为单位";返回值 "返回申请的内存地址,如果申请失败返回NULL",*...原创 2021-11-22 20:26:33 · 392 阅读 · 0 评论 -
C语言 常量变量 数据类型
常量:不能修改的值 1.数字常量,例如 10,12.5,1.25*10^1(错误),1.25e1(考试) 2.字符常量,字符用''包括起来,例如'\0','\n','0','A','a' (计算机保存的是字符的编码) 0 换行 48,65,97 需要记忆 注意,字符只能保护一个字母或者数字或者符号.'ab'是错误的写法 ...原创 2021-11-17 19:33:32 · 300 阅读 · 0 评论 -
C语言 二进制
十进制为例 1234.5=1*10^3 + 2*10^2 + 3*10^1 + 4*10^0 + 5*10^-1 (按权展开求和)。○1 其它进制转十进制都是按权展开求和,比如十六进制 0x123=1*16^2 + 2*16^1 + 3*16^0○2 十进制转其它进制:整数部分:基数除法,倒序取余。小数部分:基数乘法,顺序取整○3 十进制转二进制:除了上面的方法,还可以凑。如下图○4 二进制转八进制:二进制从右往左三个三个分组,然后按权展开求和,如下图 0136457○5 二..原创 2021-11-17 19:11:04 · 759 阅读 · 0 评论 -
C语言 函数定义
返回值 函数名(参数列表){ 函数的实现}printf:输出数据到屏幕.库函数,编译器出厂时已经写好,我们可以使用,必须引用对应的头文件scanf:从键盘获取值变量:先定义,后使用^:按位异或sqrt:开根号#include <stdio.h>#include <math.h>//判断素数int main(){ int n; scanf_s("%d",&n); //for (int i = 2; i < n; i++)...原创 2021-11-17 19:29:12 · 211 阅读 · 0 评论 -
C语言 运算符及练习
一、内容提要1、易错运算符;二、内容详解1、易错运算符:○1 ++,--,注意区分前置和后置。int i = 10;int j = ++i;//i为11,j为11i = 10;int k = i++;//i 为 11,k 为 10○2 /,注意整除问题,即整数除以整数结果为整数,舍弃末尾的小数;不能除 0。○3 <<,按位左移,右边统一补 0。○4 >>按位右移,如果是有符号数左边补符号位,如果是无符号数左边补 0。○5 < ,原创 2021-11-17 19:22:50 · 1055 阅读 · 0 评论 -
C语言 输入输出printf scanf
变量: 可以改变的量 类型 变量名; 错误越早被发现,付出的代价越小 标识符命名规范: (变量名,函数名,宏名) 1.只能字母,数字和下划线_ 2.不能以数字开头 3.不能使用关键字 4.区分大小写printf:输出数据到屏幕 %d:输出十进制整数 %c:输出字符 %f:输出小数,包括float和double %s:输出字符串 %x:输出十六进制的整数 ,考试重点 %p:输出地址scanf_s:...原创 2021-11-17 19:36:29 · 975 阅读 · 0 评论 -
C语言 分支语言 if switch语句
一、内容提要1、if...else 语句;2、switch 语句。二、内容详解1、if...else 语句的三种表示1、if(表达式 1){ 语句块 1 }2、if(表达式 1){ 语句块 1 }else{ 语句块 2 }3、if(表达式 1){ 语句块 1 }else if(表达式 2){ 语句块 2 }...原创 2021-11-17 20:03:48 · 386 阅读 · 0 评论 -
C语言 调试(数组练习)
调试: 启动调试(实心三角号)+断点,快速到达需要调试的代码周边#include <stdio.h>#include <string.h>#include <math.h>//一个数组arr中,所有的数字都成对出现,只有一个数字只出现一次,请找到它//例如1,3,2,7,6,3,2,6,1 -> 7int Single1(int arr[], int len){ int count = 0;//计数器 for (int i = 0;..原创 2021-11-22 20:07:51 · 210 阅读 · 0 评论 -
C语言 指针基础
* 指针:也称为地址. 指针==地址* &变量:获取变量的地址,&称为取地址符.例如&a* 类型 *变量;//定义改类型的指针变量 . int *p;整型指针变量* *p:访问p所指向的变量,*称为解引用或者间接访问符.* 左值:放在"="符号的左边,改写变量的值* 注意:指针必须是相同类型才能赋值* "*",在定义变量时表示指针,在使用时表示解引用.例如int *p = &a; *p = 100;#include <st...原创 2021-11-22 20:10:10 · 213 阅读 · 0 评论 -
C语言 初识数组
数组: 定义:类型 数组名[长度]; 注意长度必须是常量.例如10或者4+6,不能是变量 初始化,如果只初始化一部分则剩余部分为0 使用:通过下标访问数组元素,注意下标从0开始,可以是变量(通过循环处理) 数组arr长度公式:sizeof(arr)/sizeof(arr[0]).前提是必须在定义数组的同一个函数中, 如果数组是形参则不可以(考试的重点) sizeof:求后面内容的字节 数组在进行参数传递时,需要传数组名和数组长度 返回值 函数...原创 2021-11-22 20:06:34 · 91 阅读 · 0 评论 -
C语言 指针的应用
* 指针==地址* &变量:获取该变量的地址* 类型 *变量;定义该类型的指针(地址)变量.例如 int *p;* p访问的是p变量本身,*p访问的是p所指向的内容* 指针的应用* 不同的函数变量名相同不是同一个变量,如果地址相同则一定是同一个* 野指针:也称悬挂指针,悬空指针,没有访问权限的指针* 结论:通过一个函数来修改实参的值,必须传指针和函数内部解引用* NULL:空指针,说明当前指针无效,不能解引用.和野指针有区别* todo 写一篇关于Swap的博客* tod...原创 2021-11-22 20:22:27 · 655 阅读 · 0 评论 -
C语言 函数体
返回值 函数名(参数列表){ 函数体}1.功能代码不能写在main函数中.如何改? 只需要将main换个新名字(名字必须唯一)2.工作当中(实际)的代码不通过scanf获取数据.数据从哪来? 通过参数列表传递数据3.在功能函数中不能通过printf直接输出结果.需要通过返回值返回void :没有,它可以修饰参数列表和返回值注意:1.参数列表可以为空;2.返回值可以没有,如果没有前面写void; 3.返回值最多只能1个,如果需要返回多个暂时使...原创 2021-11-17 21:16:53 · 917 阅读 · 0 评论 -
C语言 数组
* 数组 * 1.定义 类型名 数组名[长度];//注意,长度必须是整型常量,例如10* 2.使用 通过下标访问数组元素,注意下标从0开始,可以是变量* 如何区分数组长度和下标: 定义时为长度,使用时为下标* 如何区分定义和使用:定义前有类型,使用前没有类型* 3.数组arr长度公式:sizeof(arr) /sizeof(arr[0]) .前提,必须在定义数组的同一个函数中* 一定注意,不能对形参数组进行sizeof.它已经变成指...原创 2021-11-22 20:08:50 · 123 阅读 · 0 评论 -
C语言 二维数组
* 二维数组* 定义 类型 数组名[行长度][列长度];* 使用,通过下标访问* 二维数组作为参数传递(考试难点)* int arr[4];//一维数组名arr表示首元素的地址* 将二维数组看作一维* int (*p1)[4];//p1一定是指针,指向数组,该数组长度为4,类型为int. 指向数组的指针简称数组指针* int *p2[4];//p2一定是数组,长度为4且类型为整型指针的数组.简称指针数组#include <stdio.h>//输...原创 2021-11-22 20:23:39 · 498 阅读 · 0 评论 -
C语言 字符数组和字符串
* 字符数组和字符串是工作的重点,学习的重点,考试的难点* 字符数组 ,char arr[10]; 利用char定义的数组* 字符串:用 ""包括的字符序列,字符串的末尾有一个隐含的'\0'* 字符数组是否为字符串,就看字符数组是否有'\0' ,有'\0'就是字符串,否则不是* 0:0,'\0',false,NULL* strcpy:字符串复制的库函数* strlen:求字符串的长度. 例如"abc"->3 (不包含'\0')* 不安全:数组越界,不使用安全版本的函数...原创 2021-11-22 20:18:57 · 311 阅读 · 0 评论 -
C语言 指针的应用2
* 指针==地址* &变量:获取该变量的地址* 类型 *变量;定义该类型的指针(地址)变量.例如 int *p;* p访问的是p变量本身,*p访问的是p所指向的内容* 指针的应用* 不同的函数变量名相同不是同一个变量,如果地址相同则一定是同一个* 野指针:也称悬挂指针,悬空指针,没有访问权限的指针* 结论:通过一个函数来修改实参的值,必须传指针和函数内部解引用* NULL:空指针,说明当前指针无效,不能解引用.和野指针有区别* todo 写一篇关于Swap的博客* todo..原创 2021-11-22 20:25:02 · 60 阅读 · 0 评论 -
C语言 循环语句
一、内容提要1、for 循环;2、while 循环;3、do while 循环;4、break 的使用;5、continue 的使用。二、内容详解1、for 循环for(表达式 1;表达式 2;表达式 3){语句块 1}表达式 1:初始化;最早被执行;有且执行一次。表达式 2:判断,为真循环继续,为假循环结束;每次进入循环都需判断; 每次都执行。表达式 3:步进,修改循环因子值;执行完语句块 1 之后执行;每次都执行。for...原创 2021-11-17 20:20:43 · 698 阅读 · 0 评论 -
C语言 结构体 共用体 及练习
* 结构体:自定义数据类型,不同类型打包在一起* 基本类型:内置类型,char,short,....double* 结构体定义: struct 结构体类型名 { 结构体成员1; .... 结构体成员n; }; 结构体的普通变量通过"."访问其成员 结构体的指针变量通过"->"访问其成员 typedef:定义类型....原创 2021-11-24 14:03:37 · 701 阅读 · 0 评论 -
C语言 自定义数据类型(结构体 typedef 共用体 位段 枚举)
1、结构体的定义及初始化通过数据类型来定义一个一个的变量,当需要很多相同类型的变量时有数组。 基本数据类型在使用时很方便,但是利用它们来描述现实世界就显得捉襟见肘。 例如需要保存一个班学生的信息”姓名,年龄,分数”,按照前面的学习需要单独 定义三个数组,一个保存姓名,一个保存年龄,一个保存分数。这样定义对于后面 的维护,修改,删除会带来麻烦。好比你用三个记事本一个记录学生姓名,一个记 录年龄,一个记录分数,如果删除姓名记事本中的第十个学生,而在年龄,分数记 事本中却删除了第十一个,这是很...原创 2021-11-24 14:00:51 · 718 阅读 · 0 评论 -
C语言 文件
1、文件基础 文件指存储在外部介质上的数据集合。常见的文件如下:为了简化各种设备的操作,使用户不必区分各种设备之间的区别,操作系统 把各种设备都统一作为文件来处理。从操作系统的角度看,每一个输入输出设备 都是一个文件。其中键盘是标准输入设备,其文件标识符为”stdin”,屏幕是标 准输出设备,其文件标识符为”stdout”。数据如流水一样从一处流向另一处,因此常将输入输出的数据称为数据流。数据从文件(外存)流向内存称为输入流,数据从内存流向...原创 2021-11-24 14:16:46 · 342 阅读 · 0 评论 -
C语言 文件 及练习
* 文件:* 标准输入设备:键盘(stdin)* 标准输出设备:屏幕(stdout)* 文件后缀名的作用:关联默认打开它的应用程序,可以修改* 文件分类* 文件操作* 文件指针:内存处理该文件的唯一凭证(类似学号)* 注意:1.文件路径的书写 .例如"D:\\1.txt"* 2.'\0'是字符串的结尾标记,但在文件中不需要* fread:返回值非常重要,如果返回值小于第三个参数(项目数),则表示文件读完* ftell:计算当前文件位置离开头的距离(字节)...原创 2021-11-24 14:17:54 · 101 阅读 · 0 评论 -
C语言 内存总结
* 内存总结* extern :引用外部符号(外部全局变量或函数)* static :静态,其作用1.改变内存区域;2.改变链接属性* 1.局部变量:定义在函数内部的变量 .可以被static (静态)修饰(注意和const)* 2.全局变量:定义在函数外部的变量.可以被static (静态)修饰(注意和const) 最大的问题"不安全"* 3.动态内存* 4.函数:存放在代码段,可以被static修饰 .在C中static主要用来修饰函数* 内部函数前面必...原创 2021-11-22 20:46:36 · 261 阅读 · 0 评论