![](https://img-blog.csdnimg.cn/a8fa4de75b6749309080cfd5a4d7247a.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
初识C语言
文章平均质量分 83
分享个人在C语言学习中收集汇总的各类知识点,希望对你有所帮助!一起学习吧!
慕雪华年
在校大氵生一枚,目前学习C/C++
展开
-
【C语言】clock_gettime函数的使用
第一个参数有下面几种选项。原创 2023-12-10 18:20:03 · 1104 阅读 · 0 评论 -
【C语言】数组竟然还可以这样调用?慕雪学艺不精了!
本文首发于数组竟然还可以这样调用?只能说慕雪学艺不精了!more。原创 2023-12-10 18:19:33 · 95 阅读 · 0 评论 -
【C语言】可变参数列表va_list
本篇博客让我们来认识一下C语言学习过程中往往被忽略的可变参数列表more所谓可变参数,就是一个不限定参数数量的函数,我们可以往里面传入任意个数的参数,以达成某些目的。原创 2023-02-21 18:43:04 · 1825 阅读 · 0 评论 -
【C语言】可变参数列表
本篇博客让我们来认识一下C语言学习过程中往往被忽略的可变参数列表more所谓可变参数,就是一个不限定参数数量的函数,我们可以往里面传入任意个数的参数,以达成某些目的。;本文首发于。原创 2023-02-13 07:47:05 · 759 阅读 · 0 评论 -
【C语言】预处理操作(详解)
文章目录前言😜1.预定义符号2.`#define`2.1定义标识符加分号问题2.2定义宏宏需要注意的问题2.3define替换规则2.4使用`#`和`##`2.4.1`#`将字符串插入字符串2.4.2`##` 将两个符号合并2.5带副作用的宏参数2.6宏和函数对比2.7命名约定2.7 `#undef`3.命令行定义4.条件编译4.1if/endif4.2多个分支的调节编译4.3判断符号是否已被定义4.4嵌套指令5.文件包含5.1包含方式双引号方式库文件方式5.2嵌套文件包含问题如何解决?warning: #原创 2022-03-10 22:02:54 · 2735 阅读 · 16 评论 -
【C语言】函数调用的参数压栈(详解)
文章目录前言1.什么是栈区?1.1栈区小知识点2.知识点2.1 寄存器2.2 主函数调用3. 逐条解释3.1 从main开始3.2 调用Add3.3 回到main函数3.4 结束程序4.本篇博客中的汇编语言总结5.结语前言在早期的学习中,我们已经了解到当函数传值调用参数的时候,用的是形参。形参是实参的一份临时拷贝,对形参的改变不会影响实参里的值。传值调用和传址调用👉点我今天让我们以汇编语言来了解函数调用的参数压栈这一知识点所用编译器:VS20191.什么是栈区?栈,是一种数据结构。在原创 2022-03-05 01:02:28 · 9985 阅读 · 20 评论 -
【C语言】程序运行过程:预处理/编译/汇编/链接
文章目录1.程序运行的几个阶段1.1预编译1.2编译1.3汇编1.4符号表和链接2.运行环境结语哈喽啊,盆友们。一起来看看C语言中编译预处理的内容吧!😜1.程序运行的几个阶段众所不周知,C语言的程序运行分为几个阶段。咱们可以看看下面这个图,简单了解一二👇细分开来,编译还分为3个小阶段:预编译(预处理)、编译、汇编这三个阶段又分别做了什么事情呢?这就需要我们用linux下的gcc编译器来验证了1.1预编译现在我们编写了一个这样的代码在运行窗口中输入以下指令,进行预编译操作,得到tes原创 2022-03-02 12:30:04 · 7640 阅读 · 9 评论 -
【C语言】文件操作(详解)
本文详解了C语言的文件函数操作原创 2022-03-01 13:41:59 · 1650 阅读 · 14 评论 -
【C语言】动态内存管理(详解malloc/calloc/realloc)
文章目录1.为什么会有动态内存分配?2.动态内存函数2.1 malloc2.2 free2.3 calloc2.4 realloc3.常见错误3.1对NULL指针的解引用3.2对动态内存空间的越界访问3.3对非动态内存空间进行free3.4使用free释放动态内存空间的一部分3.5对一个空间进行重复释放3.6内存泄漏4.C/C++程序中内存区域划分结语直入主题,动态内存管理! ????️♂️1.为什么会有动态内存分配?我们一般使用以下两种方式开辟内存int a = 20;//在栈空间上开辟四个字节原创 2022-01-29 15:52:18 · 2519 阅读 · 10 评论 -
【C语言】自定义类型详解
在C语言中,有几个比较特殊的自定义类型:结构体、枚举、联合本篇博客,就让我们来认识一下这些自定义类型吧!????1.结构体结构体是一些值的集合,结构体的每个成员可以是不同类型的变量1.1结构体的声明以个人信息为例,有姓名、性别、年龄、身高等几个元素。可以定义结构体如下struct Stu{ char name[20]; char sex[5]; int age; int hight;}s2, s3, s4;//s2,s3,s4全局变量1.2特殊声明在声明结构体的时候,可以不完全原创 2022-01-28 18:05:11 · 470 阅读 · 10 评论 -
【C语言】常用的字符串函数和内存函数
文章目录1.字符串函数1.1 strlen1.2 strcpy1.3 strcat1.4 strcmp1.5 strncpy/cat/cmp1.6 strstr1.7 strcok1.8 strerror2.内存函数2.1 memcpy2.2 memmove2.3 memcmp结语????今天我们来学习一些新的字符串函数和内存函数,了解它们背后运行的原理,并完成部分函数的自我实现????1.字符串函数1.1 strlen这个函数我们已经很熟悉了,它的作用是计算字符串的大小,以\0作为结尾模拟实现如原创 2022-01-25 19:53:15 · 899 阅读 · 1 评论 -
【C语言】指针进阶终点站,回调函数和qsort
文章目录1.回调函数2.qsort函数2.1void*指针2.2qsort函数定义2.3利用qsort函数来排序int/char2.4用qsort排序结构体3.模拟实现qsort函数结语嘟嘟嘟,指针进阶的公交车到终点站????啦!这一站我们将学习回调函数、qsort的使用以及模拟实现1.回调函数定义:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一 个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该 函数的实现方直接调用,原创 2022-01-24 20:26:50 · 1079 阅读 · 7 评论 -
【C语言】指针进阶第五站,函数指针
文章目录1函数指针1.1基本形式1.2用函数指针来调用函数1.3两个奇葩的代码奇葩代码1奇葩代码22函数指针数组2.1基本形式2.2计算器实现2.2.1switch语句2.2.2函数指针形式2.3指向函数指针数组的指针3.相关练习题结语指针进阶第五站????:函数指针点进我的主页,可以回顾前四站的内容哦~1函数指针函数也有自己的地址,函数名/&函数名 就是函数的地址1.1基本形式在数组指针的学习中我们了解到int arr[5];int (*pa)[5] = &arr;/原创 2022-01-24 12:48:37 · 4166 阅读 · 17 评论 -
【C语言】指针进阶第四站,数组/指针的传参问题
文章目录0.引例1.一维数组传参2.二维数组传参3.一级指针传参4.二级指针传参5.如何判断参数类型结语朋友们,到站啦!指针进阶第四站????,传参问题0.引例自定义函数里形参的类型,要和函数调用中传过去的实参类型相对应在初阶C语言的学习里面,我们了解到传参分为传址和传值两种类型一起来复习一下吧????【链接】test函数里的是int类型,我们传过去的参数a也是int类型void test(int n){}int main(){ int a=1 test(a);原创 2022-01-23 19:26:51 · 914 阅读 · 7 评论 -
【C语言】指针进阶第三站,数组指针
文章目录数组指针1基本概念1.1代码示例1.2错误示范2arr和&arr的区别3数组指针的使用3.1打印一维数组3.2打印二维数组4练习:判断4.1 int arr[5]4.2 int*parr[10]4.3 int (*parr2)[10]4.4 int(*parr3[10])[5]结语上一站????我们学习了指针数组今天来到我们的第三站????寒假也不能落下学习!今天学到了一个新的markdown语法我是红色<font color=red>我是红色</font&原创 2022-01-21 13:23:42 · 1202 阅读 · 10 评论 -
【C语言】指针进阶第二站,指针数组
文章目录指针数组示例1:定义多个字符指针示例2:存放数组名的数组arr[i]\[j]和\*(\*(arr+i)+j)int\* arr[]和二维数组的不同示例3:存放二级指针的数组结语嘟嘟嘟????,指针进阶的第二站指针数组到了!上车上车!回顾一下第一站????的内容:字符指针指针数组数组是一种类型的数的集合整型数组的元素都是int类型指针数组的元素都是指针变量int* arr1[10];//整型指针的数组char*arr2[10];//一级字符指针的数组char** arr3原创 2022-01-20 18:35:49 · 1131 阅读 · 7 评论 -
【C语言】指针进阶第一站,字符指针&typedef关键字
文章目录1字符指针1.1代码示例11.2代码示例22typedef关键字2.1如何使用2.2typedef和#define的区别2.2.1指针连续定义简单回顾一下指针的概念内存会划分以字节为单位的空间,每一个字节都有一个编号(地址/指针)指针变量可以存放这个地址/指针注:我们日常所说的指针,一般是指针变量下面让我们坐上指针进阶的????,来到第一站!字符指针1字符指针1.1代码示例1int main(){ char ch = 'w'; char* p= &ch;原创 2022-01-18 10:20:35 · 1070 阅读 · 17 评论 -
【C语言】浮点数在内存中的存储(详解)
本文详解了浮点数float和double在内存中的存储方式原创 2022-01-10 16:12:34 · 8490 阅读 · 19 评论 -
【C语言】char类型如何在内存中存储?
文章目录引子char类型存放和提升例一:-1例二:-128char变量中存放数值的范围如何查询范围定义?结语引子上篇博客向大家介绍了int类型在内存中的存储方式【链接】本篇博客我们继续往后,看看整形家族里的char类型是如何在内存中存储的吧!char类型字符类型包括以下两种形式unsigned char 无符号signed char 有符号用一个简单的printf来看看它们在打印上的区别#include<stdio.h>int main(){ char a=原创 2022-01-05 17:27:30 · 7540 阅读 · 13 评论 -
【C语言】unsigned无符号类型运用的两个实例
文章目录前排提醒????示例1示例2小结前排提醒????本篇博客是对下一篇博客《char类型在内存中的存放》的拓展并非对unsigned类型的详解!示例1#include <stdio.h>int main(){ int i=-20; unsigned int j=10; printf("%d\n",i+j); return 0; } 当有符号类型和无符号类型相加的时候,编译器是怎么处理的呢?10000000 00000000 00000000 0001010原创 2021-12-16 12:32:37 · 2143 阅读 · 4 评论 -
【C语言】整型数据在内存中的存储(详解)
文章目录数据类型布尔类型无符号数据的打印不同数据占用的字节整型在内存中的存储整型家族“原反补”三兄弟二进制要怎么写出来呢?什么是符号位?大小端问题判断当前编译器是大端还是小端为什么整型在内存中存放的是补码呢?结语数据类型我们知道,C语言中有很多不同的数据类型在cppreference.com网站上可以找到C语言中的不同类型【链接】先来认识一个不那么常见的类型布尔类型C99中引入了布尔类型 _Bool实质:把1和0变成ture和false#include<stdbool.h>原创 2021-12-03 23:30:41 · 4569 阅读 · 14 评论 -
【C语言】sizeof操作符详解
sizeof操作符上篇博客提到了一个知识点 【链接】sizeof操作符括号内的表达式是不会真正计算的这个是为什么呢?我们先来看看sizeof的基本用法基本用法#include<stdio.h>int main(){ int a=10; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(int)); printf("%d\n",sizeof a); return 0; } 打印结果为3个4但当我们以这种方式书写原创 2021-11-29 10:31:00 · 2714 阅读 · 9 评论 -
【C语言】整型提升和算术转换
文章目录整型提升表达式求值隐式类型转换数据类型及大小截断&提升代码示例1代码示例2代码示例3代码示例4 -sizeof算术转换代码示例1表达式属性结语整型提升要想知道什么是整型提升,那就要从表达式求值说起表达式求值表 达 式 求 值 的 顺 序 一 部 分 是 由 操 作 符 的 优 先 级 和 结 合 性 决 定同 样,有 些 表 达 式 的 操 作 数 在 求 值 的 过 程 中 可 能 需 要 转 换 为 其 他 类 型什么是表达式? 举个最简单的例子int main(){原创 2021-11-17 22:33:47 · 1613 阅读 · 9 评论 -
【C语言】剔除最大最小值后,计算数组元素的平均值
文章目录问题引入理解1去除一个最大/最小值运行结果题目实际要求解题思路1&2解题思路3 -冒泡排序计数器主函数代码问题引入题目内容:定义一个含10个整型元素的一维数组,从键盘上输入10个元素值,求去掉最大值和最小值之后的元素平均值.输入格式:用循环控制依次输入10个元素值,scanf语句中的格式控制串为: “%d”输出格式:输出平均值, printf中的格式控制串为 “%lf\n”输入样例:2 3 4 5 6 2 4 6 4 3输出样例:3.833333理解1一般原创 2021-11-11 20:14:37 · 16176 阅读 · 5 评论 -
【C语言】童年经典三子棋
三子棋问题引入 - 什么是三子棋?自定义头文件项目中不同源文件之间的连接代码实现1.打印菜单&初始化棋盘2.打印棋盘3.游戏基本流程4.玩家走棋5.电脑落子6.判断是否胜利7.判断是否平局游戏效果完整代码game.ctest.cgame.h结语问题引入 - 什么是三子棋?想必大家儿时都玩过:#字棋如图,即一个3x3的格子,玩家需要在横、竖、斜三条线上布下自己的棋子先连成一条线上3个棋子的玩家获胜如果格子填满后还未有胜者,即为平局今天就让我们用c语言代码来完成一个基础的三子棋小游戏涉原创 2021-11-10 08:58:48 · 2266 阅读 · 3 评论 -
【C语言】用代码还原你的童年之扫雷游戏
扫雷游戏文章目录扫雷游戏1.游戏程序主函数2.游戏实现原理棋盘大小为什么需要11x11?游戏过程3.游戏代码实现3-1.初始化和打印3-2.布置雷区3-3.玩家排查雷‘0’的作用3-4. 系统扫描雷4.查看结果想必屏幕前的你,肯定玩过windows XP系统自带的那个游戏,扫雷回想当年,我根本没看懂这个游戏是怎么玩的比起扫雷,三维弹球对我更有吸引力跑题了本篇博客就让我们一起来试试,如何通过C语言代码,制作出一个“扫雷游戏se”1.游戏程序主函数在编写这类游戏代码时,我们要用到的主函数基本原创 2021-09-03 11:05:15 · 1107 阅读 · 10 评论 -
【C语言】用递归和非递归,求第n个斐波那契数
文章目录问题引入 - 什么是斐波那契数列?1.非递归方法(迭代)什么是迭代?代码实现迭代的缺点2.递归代码实现递归的缺点总结问题引入 - 什么是斐波那契数列?斐波那契数列中,第n项为n-1和n-2项之和1,1,2,3,5,8,13,21,34,55……这个数列非常经典,经常用于编程语言初学者的练习接下来让我们用非递归和递归两种方式来实现这个数列并了解两种方法的优缺点!1.非递归方法(迭代)什么是迭代?迭代其实和循环的意义差不多(个人理解)我们计算斐波那契数列的时候,需要从第一原创 2021-11-07 22:56:04 · 1225 阅读 · 2 评论 -
【C语言】验证哥德巴赫猜想
文章目录问题来源题目要求如何判断素数?主函数完整代码+效果演示写代码中的误解总结问题来源这是学校的一个作业,原题如下题目先给出了哥德巴赫猜想的背景知识(我还真不知道)2000以内的正偶数都能分解成两个质数(素数)之和题目要求下面来梳理一下题目的要求:输出样式为a=b+c,使用%4d=%4d+%4d输出每行输出4个,每行最后一个输出无空格每个偶数只需要一个结果即可(后续较大的偶数有很多种解)弄懂了题目要求,下面就来一步一步写代码如何判断素数?在上篇博客里面提到了如何判断素数=原创 2021-10-30 15:59:50 · 23354 阅读 · 5 评论 -
【C语言】如何判断一个数字是否为素数(质数)?
文章目录如何判断素数方法1---试除法代码改造1-1方法2---开平方法感谢你看到最后如何判断素数题目要求:输出100-200的素数首先我们要知道什么是素数(质数),以防有人忘记(比如刚学开始学c的我就忘记了)素数(质数)只能被1和它自己整除7只能被1和7整除,是素数9能被3整除,不是素数方法1—试除法#include<stdio.h>int main(){ int i=0; int count=0; for(i=100;i<=20原创 2021-10-30 12:57:37 · 7364 阅读 · 5 评论 -
初识C语言,简单的函数递归==>实现依次打印出数字中的每一位
简单的Print递归说句题外话,很多时候单词我是认识的,但是如果它全大写了,我总要反应老一会才能想出来它的意思有和我一样的人吗?今天的c语言课讲到了一道非常经典的递归题目代码如下:#include <stdio.h>void Print(int n){ if (n > 9) Print(n / 10); printf("%d ", n % 10);}int main(){ int num = 0; scanf("%d", &num); Pr原创 2021-10-26 17:47:46 · 872 阅读 · 0 评论 -
初识C语言==>printf函数的执行顺序,涉及函数传参
文章目录问题产生printf语句的执行顺序函数内数据传参总结问题产生偶然在c语言学习交流群看到了这么一串让人费解的代码#include <stdio.h>int main(){ int i = 0; int j = 0; scanf("%d", &i); j = -i++; printf("%d %d %d", i, j, i++); return 0;}这里让我疑惑的是,为什么打印的第一个i是6而不是5?printf语句的执行顺序这里要涉及到一个之原创 2021-10-26 07:28:02 · 1078 阅读 · 5 评论 -
初识C语言==>如何将输入的数字逆序打印?
这个问题是我在做学校的作业时候看到的。只隐约有印象讲过,但是忘记了怎么操作。听同学的点通才回想起来,特此写个博客留记逆序打印目的:输入“789”,打印“987”注:本博客的数字逆序只设计 十进制代码实现有两种方式:1.利用if语句进行大小判断,直到选出从大到小的数字排序这个方法十分复杂,稍不留意就会弄错,所以在实际应用中不推荐这样操作这里就不赘述具体代码了。(才不是懒,压根没试过)2.使用%10的方法直接打印代码如下:#include <stdio.h>int ma原创 2021-10-17 22:05:50 · 7393 阅读 · 3 评论 -
初识C语言==>什么是二级指针?
二级指针什么是二级指针?我们通常使用的int*p就是一个一级指针,而二级指针存放的变量就是一个一级指针代码示例如下:int main(){ int a =10; int*pa= &a; //有两个*号 的原因 int ** ppa= &pa;//int*是代表变量pa的类型,*ppa表明这是一个指针变量 return 0;}这里面pa是指针变量,一级指针ppa是二级指针变量,&pa取出pa在原创 2021-09-28 08:52:38 · 327 阅读 · 0 评论 -
初识C语言==>野指针是什么?指针在什么情况下会出错?
野指针什么是野指针?1.指针未初始化2.越界访问3.指针指向的空间已释放如何避免野指针?1.指针初始化2.小心指针越界3.指针指向空间释放就置之为NULL4.指针使用之前检查有效性结语什么是野指针?概念︰野指针就是指针指向的位置是不可知的(如:随机的、不正确的、没有明确限制的)说人话就是:野指针是错误的指针引用形式,通常有以下四种情况指针未初始化越界访问指针指向的空间已释放1.指针未初始化这个概念非常容易理解,同变量一样,指针同样需要我们的初始化//初始化指针int a = 10;原创 2021-09-16 21:51:47 · 687 阅读 · 0 评论 -
初识C语言==>数组练习题分享
学习记录DAY21好久没记录(氵)博客了,今天记录一下昨天学习的数组练习题中的内容数组练习题文章目录数组练习题(1)错误的引用数组(2)数组中的逗号表达式逗号表达式(3)数组中字符串和字符元素的区别(4)自定义函数与数组的简单练习题昨天学习的练习题挺多的,下面只记录了几个我个人认为比较重要和典型的内容(1)错误的引用数组题目:int arr[10]={0};下面错误的引用方式是:A. arr[0]=1B. arr[0]=5*2C. arr[10]=2D. arr[1]=arr原创 2021-09-13 21:12:44 · 363 阅读 · 1 评论 -
初始C语言==>逻辑操作符典例分享
逻辑操作符介绍逻辑与&逻辑或逻辑与逻辑或简单代码演示稍微复杂的逻辑操作符应用情况一前置++与后置++情况二情况三情况四结语介绍逻辑操作符是双目操作符中的一种,它起到一种判断作用,只有两边表达式为真或有一个为真才会执行。这个操作符的关系有点绕,我们需要很清楚地知晓它的生效逻辑,方便我们在后续代码学习中更好的使用这个操作符逻辑与&逻辑或我们需要认识的逻辑操作符就是以下两个逻辑与 &&逻辑或 ||逻辑与符号: &&同时为真才为真 1有一个原创 2021-09-08 08:19:30 · 463 阅读 · 2 评论 -
初识C语言==>变量的作用域和生命周期
变量的作用域和生命周期文章目录变量的作用域和生命周期1.全局变量和局部变量2.变量的作用域2-1.声名外部变量的方法3.变量的生命周期4. 局部变量&自动变量1.全局变量和局部变量定义在代码块外部的是全局变量定义在代码块内部的是局部变量什么是代码块?//这是代码快外部int main(){//这是代码块内部}实际上用int main来演示是不太对的,实际使用的时候我们定义变量是在int main内部定义的下面这个例子更加清晰明了int main(){ int i =原创 2021-08-30 13:14:47 · 306 阅读 · 3 评论 -
初识C语言==>如何将输入的数字从大到小排序并打印出来?
如何将输入的数字排序并打印出来文章目录如何将输入的数字排序并打印出来1.scanf函数2.tmp盒子结语承接上篇博客中输出数组内元素最大值的内容本篇博客向大家分享如何将我们输入的三个数字进行大小排序并打印出来1.scanf函数int main(){ int a = 0; int b = 0; int c = 0; scanf("%d%d%d", &a, &b, &c);既然需要输入,那就要用到scanf函数来接受我们输入的数字要使用指针变量,因为这里的sc原创 2021-08-27 09:29:57 · 1623 阅读 · 3 评论 -
初识C语言==>如何产生数组中的最大值,并打印出来?
产生数组最大值文章目录产生数组最大值正负性进阶玩法以自定义函数的形式实现此功能结语今日风和日丽,是个写~~(水)~~博客的绝佳时机和大家分享一串C语言中产生数组最大值的代码实现方式很简单,我们需要用到for循环和if语句#include <stdio.h>int main(){ int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//数组初始化 int max = 0;//设置一个最大值 int i = 0; int sz = sizeof(arr)原创 2021-08-27 08:54:07 · 1963 阅读 · 0 评论 -
初识C语言==>冒泡排序
冒泡排序文章目录冒泡排序代码实现SZ的位置问题比较&交换结语无内鬼,直入主题!冒泡排序的思想核心是:比较两两相邻的元素,并且可能的话需要交换说人话就是把原本是9,8,7,6,5,4,3,2,1,0的数组变成0 ,1,2,3,4,5,6,7,8,9也可以把无序的数组排列为有序(从小到大or从大到小)基本的流程如下图:同时我们可以计算出,0·9这十个数字,重新排列完需要循环9次也就是N个数字需要N-1趟的排列代码实现说完了原理,还是需要敲代码来实现“老铁们int main r原创 2021-08-25 15:04:01 · 788 阅读 · 2 评论