C语言笔记
文章平均质量分 81
C语言学习的笔记
铭--
夜色难免黑凉,前行必有曙光
展开
-
【C语言】文件操作
磁盘上的文件是文件,电脑上C盘、D盘上的文件就是文件一般文件分为程序文件和数据文件(从文件功能的角度来分类的)原创 2023-04-12 16:19:00 · 340 阅读 · 0 评论 -
【C语言】atoi的模拟实现
在模拟实现atoi函数前,我们要了解atoi的使用atoi函数是将数字字符串转换为对应的数字,比如输入字符串“-123”,打印出整型数字-123。原创 2022-10-22 14:03:58 · 695 阅读 · 0 评论 -
【C语言】详解qsort函数使用和模拟实现
详解qsort函数的模拟实现,之前在指针中的进阶中有大概写qsort函数的使用和模拟实现,这里单独摘出并详细的讲解qsort函数的使用和模拟实现原创 2022-10-08 17:50:56 · 583 阅读 · 0 评论 -
动态内存管理(2)
回顾:1.为什么要有动态内存管理?2.动态内存管理是在堆区上进行内存空间的开辟,开辟到是一块连续的空间int main(){//等价于malloc ( 40 );}原创 2022-10-07 19:47:27 · 253 阅读 · 0 评论 -
简易版通讯录
实现一个通讯录:通讯录可以用存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址这个通讯录与前面写的小游戏一样,使用三个文件contact.h---函数的声明contact.c---功能的实现test.c---通讯录的测试。原创 2022-09-24 15:14:34 · 2807 阅读 · 0 评论 -
动态内存管理(1)
C语言提供了一个动态内存开辟的函数使用malloc函数的头文件为#include这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针如果开辟成功,则返回一个指向开辟好空间的指针如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查返回值的类型时void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用由自己来决定如果参数size为0,malloc的行为是标准未定义的,取决于编译器。原创 2022-09-24 13:39:03 · 75 阅读 · 0 评论 -
自定义类型(3)
打印出来的结果:枚举常量的值是不可以更改的,但是给常量一个值,如果不给值,就是0,下面的常量依次加一,但是如果给常量一个值,后面的常量就是从这个值开始依次+11.2枚举的优点为什么使用枚举?我们可以使用#define定义常量,为什么非要使用枚举?1.增加代码的可读性和可维护性2.和#define定义的标识符比较枚举有类型检查,更加严谨4.便于调试test.c到test.exe,test.c要经历预处理(预编译)、编译、汇编、链接才能到test.c。原创 2022-09-22 20:41:21 · 74 阅读 · 0 评论 -
自定义类型(2)
位段的声明和结构体是类似的,有两个不同:1.位段的成员必须是int、unsigned int或signed int2.位段的成员名后边有一个冒号和一个数字位段A的大小:是八个字节,首先要知道位段中位是什么-->它指的是也就是说_a:2;的意思就是说_a这个成员只需要2个比特位;_b成员只需要5个比特位;_c成员只需要5个比特位;_d成员只需要30个比特位这里struct A中总的字节大小是47bit,需要6byte,但是我们算出struct A实际上需要8byte,为什么?原创 2022-09-21 11:58:44 · 83 阅读 · 0 评论 -
字符串+内存函数的介绍(1)
C语言中对字符和字符串的处理是很频繁,但是C语言本身是没有字符串类型的,字符串通常仿造常量字符串或者字符数组中,字符串常量适用于那些对它不做修饰的字符串函数重点介绍处理字符和字符串的库函数的使用和注意事项strlenstrcpystrcatstrcmpstrncpystrncatstrncmpstrstrstrokstrerror字符操作memcpymemmovememsetmemcmp。原创 2022-09-18 10:29:28 · 2079 阅读 · 0 评论 -
自定义类型(1)
{int price;}sb1 = {"C语言程序与设计","谭浩强",55,"THQ10001"},sb2;int main(){struct Book sb2 = { "数据结构","李春葆","59","LCB10001" };}也可以不按照顺序进行初始化。原创 2022-09-17 18:34:26 · 97 阅读 · 0 评论 -
指针笔试题
二维数组sizeof内部的表达式不参与运算,那么为什么呢?原因:当我们写代码的时候是在test.c文件,但是在运行的时候是test.exe文件中运行源代码要经过编译然后再加上链接,成为可执行程序才能运行,运算是在运行的过程中才完成的,但是sizeof在编译期间就完成了,所以sizeof内部的表达式不参与运算总结:数组名的意义:1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。原创 2022-09-10 07:31:22 · 92 阅读 · 0 评论 -
指针和数组笔试题解析(1)
strlen求字符串长度的计算的是字符串中\0之前出现的字符的个数,统计到\0为止,如果没找到\0,会继续往后找。注意:strlen是库函数,需要包含头文件#includesizeof是计算对象或者类型创建的对象所占内存空间的大小,单位是字节。sizeof是操作符,不是函数。原创 2022-09-07 13:54:03 · 78 阅读 · 0 评论 -
指针(进阶)
数组指针是指针去掉名字就是它的类型这里的(*p)就相当于arr一般情况下,数组指针应用于二维数组数组指针的应用p+i相当于第i的地址3.2 &数组名和数组名数组名是数组首元素的地址1.sizeof(数组名)2.&数组名/ /整型数组/ /指针数组/ /数组指针parr3 是存放数组指针的数组/ /将名字parr3 [ 10 ] 去掉/ /int (*) [ 5 ] - ->数组的元素类型。...原创 2022-08-13 19:27:24 · 144 阅读 · 0 评论 -
数据的存储(2)(浮点数)
打印出来的结果是死循环,从9 8 7 6 5 4 3 2 1 0然后开始是很大的数,因为是无符号整数,当打印我们所认为的负数的时候,对于无符号来说就是很大的数,对于i>=0恒成立故后面开始死循环char类型的范围是-1~-128、0~127,然后strlen遇到\0就停止,并且\0的ASCII码值是0,也就是当a[i]==0时就停止所以打印出的结果时255注意:ASCII码值时没有负数的unsigned char 的取值范围时0~255所以i...原创 2022-08-10 17:17:20 · 292 阅读 · 0 评论 -
数据的存储(1)
前面我们已经学习了基本的内置类型(C语言本身就具有的类型):char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形(C99中才引入的)float //单精度浮点数double //双精度浮点数//C语言有没有字符串类型以及他们所存储空间的大小1.使用这个类型开辟内存空间的大小(大小决定了使用范围)2.如何看待内存空间的视角。...原创 2022-08-09 14:22:56 · 268 阅读 · 0 评论 -
扫雷游戏(基础版本)
首先这扫雷游戏是一个棋盘,随便点开一个位置,如果是雷,就被炸死,如果不是雷,就需要提示一下周围八个坐标有几个雷像边缘处的地方,查找周围的八个坐标会发生数组越界,所以在创建数组时,要比我们想要展示的棋盘多两行两列(上下各多一行,左右各多一列)。当我们把所有的雷排查掉时,游戏结束如何设计一个扫雷游戏?要设置雷的个数,向上面的9*9的棋盘中,有十个雷,我们需要一个数组存放我们的雷,上面讲了,我们学要多设置两行两列的数组,所以在9*9的扫雷游戏中,我们需要11*11的数组。把雷按上,是雷的地..原创 2022-08-08 12:37:27 · 728 阅读 · 0 评论 -
实用调试技巧
第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。后来把导致计算机出现问题的错误称之为bugDebug通常称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用Debug版本是程序员用于寻找错误的版本Release版本是用户使用的版本,没有调试信息在环境中选择debug选项,才能是代码正常调试。...原创 2022-08-06 13:43:23 · 717 阅读 · 0 评论 -
三子棋游戏
test.c //测试游戏的逻辑game.c //游戏代码的实现game.h //游戏代码的声明原创 2022-07-29 16:54:52 · 477 阅读 · 0 评论 -
C语言实现猜数字游戏
3.要求是随机生成1~100之间的随机数,而rand函数生成随机数的范围是0到RAND_MAX之间,所以rand函数要%100+1(任何数%100都是0~99的数,+1范围便是1~100)使用rand函数,生成随机数,使用rand函数之前,要先使用srand函数才能生成随机数,srand函数只要调用一次就可以生成随机数,所以在主函数中使用即可。使用srand函数的参数是要一直变化的数才能生成随机数,时间是一直变化的,引入时间戳,在C语言中,使用时间戳相当于C语言中的time函数。.........原创 2022-07-21 20:25:28 · 841 阅读 · 0 评论 -
分支循环语句(1)
C语言语句分为以下五类表达式语句函数调用语句控制语句复合语句空语句控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。条件判断语句也叫分支语句if语句、switch语句;循环执行语句dowhile语句、while语句、for语句;转向语句break语句、goto语句、continue语句、return语句。...原创 2022-01-17 02:09:01 · 251 阅读 · 0 评论 -
指针进阶(1)
数组指针是指针整形指针int*p;能够指向整型数据的指针浮点型指针float*p;能够指向浮点型数组的指针所以数组指针是能够指向数组的指针//指针数组//数组指针,p2可以指向一个数组,该数组有10个元素,每个元素是整型类型解释//p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针//这里要注意[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。...原创 2022-07-19 16:11:45 · 555 阅读 · 0 评论 -
第七节-结构体(初阶)
结构体类型的声明 结构初始化 结构体成员访问 结构体传参1.结构体的声明1.1结构体的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量1.2结构的声明struct tag{ member-list;//成员列表}variable-list;//变量列表变量列表可有可无这里的p1,p2是使用struct Peo结构类型创建的2个变量但是多数形况下我们都是不写变量列表struct Peo是类型 ...原创 2022-05-18 15:35:34 · 96 阅读 · 0 评论 -
第六节—指针(初阶)
目录1.指针是什么2.指针和指针类型2.1指针+-整数2.2指针的解引用3.野指针3.1野指针成因3.2如何避免野指针4.指针运算5.指针和数组6.二级指针7.指针数组1.指针是什么 2.指针和指针类型 3.野指针 4.指针运算 5.指针和数组 6.二级指针 7.指针数组1.指针是什么指针是什么?指针理解的2个要点:1.指针是内存中一个最小的单元编号,也就是地址2.平时口语中说的指针,通常指的是指针变量,用来存放内存地址的.原创 2022-05-18 14:02:22 · 129 阅读 · 0 评论 -
第五节-操作符详解
1.操作符分类算数操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员2.算术操作符+ - * / %除了%操作符之外,其他的几个操作符可以作用于整数和浮点数,计算的是整除之后的余数,比如,5%2,得到的结果是1,%取模操作符的两端必须是整数 对于 / 操作符,如果两个操作数都为整数,执行整数除法。并且只要有浮点数执行的就是浮点数除法,举个例子,5/2的结果...原创 2022-05-14 20:33:39 · 419 阅读 · 0 评论 -
第四节-数组
,原创 2022-04-30 16:03:50 · 622 阅读 · 0 评论 -
第三节-函数
1.什么是函数?维基百科中对函数的定义:子程序在计算机科学中,子程序,是一个大型程序中的某部分代码,由一个或多个语句块组成。它复杂完成某项特定任务,而且相较于其他代码,具备相对的独立性 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成软2.C语言中函数的分类1.库函数2.自定义函数2.1库函数简单总结,C语言常用的库函数都有:IO函数 字符串操作函数 内存操作函数 时间/日期函数 数字函数 其他库函数...原创 2022-04-26 19:33:16 · 116 阅读 · 0 评论 -
分支循环语句(1)
1.什么是语句?表达式语句 函数调用语句 控制语句 复合语句 空语句本篇主要介绍控制语句控制语句用于控制的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句可以分成以下三类:条件判断语句也叫分支语句:if 语句、switch 语句: 循环执行语句:do while语句、while语句、for 语句; 转向语句:break 语句、goto 语句、continue 语句、return语句本编介绍的分支循环语句都属于控制语句2.分支语句(选择结原创 2022-04-18 11:20:25 · 331 阅读 · 0 评论 -
初识C语言(4)
11.1关键字typedeftypedef是类型定义,这里应该理解为类型重命名#include<stdio.h>typedef unsigned int uint;typedef struct Node{ int data; struct Node* next;}Node;int main(){ unsigned int num=0; unit num1=1;//这里num与num1的类型是一样的,都是无符号整型,unit只是uns原创 2022-04-11 14:28:02 · 559 阅读 · 0 评论 -
初识C语言(3)
10.操作符除号的两端都是整数的时候,执行的是整数除法,如果两端只要有一个浮点数就执行浮点数的除法取模操作符的两个操作数只能是整数#include<stdio.h>int main(){ int a = 0;//初始化 a = 20;//赋值}a+b;//+的两端一共有两操作数称为双目操作符向上面的单目操作符只有一个操作数//! 逻辑反操作,就是把假的变真,真的变假//在C语言中,非0表示为真,0表示为假sizeof是操作符,不是函数原创 2022-04-09 11:32:21 · 919 阅读 · 0 评论 -
初识C语言(作业)
1.C语言的数据类型1)内置的比如 char short int long float double2)自定义的(我们自己创建的,C语言本身是没有的)比如 结构体,枚举等2.局部变量的作用域:局部变量所在的局部范围3.当局部变量和全局变量的名字相同时,局部变量优先4.字符串的结束标志时 '\0'C语言中的几个0:0 - 数字0' 0 ' - 字符0 - ASCII值是48' \0 '-字符 - ASCII值是0EOF --end of file--文件结束原创 2022-04-09 07:42:42 · 115 阅读 · 0 评论