![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言进阶
文章平均质量分 95
偷吃橙子的喵
功不唐捐 玉汝于成
展开
-
C语言--程序环境与预处理
我们在写一个C语言程序的时候,时常会创建一个后缀为**.c**的文件,这个文件究竟是怎样变成可执行的程序的呢?其实是通过编译和链接这样的过程来实现。本篇文章我们就将围绕着编译和链接是什么来展开。这个用法很常见,看下面这几个例子# define MAX 1000 # define reg register //为 register这个关键字,创建一个简短的名字 # define do_forever for(;;) //用更形象的符号来替换一种实现 # define CASE break;原创 2023-04-07 17:10:40 · 380 阅读 · 23 评论 -
C语言--文件操作
我们为什么要使用文件呢?我们前面写过通讯录,但是我们发现,我们往通讯录中添加联系人后,一旦关掉程序,我们添加的联系人就都没有了,又要重新输入,这样的通讯录使用起来就很不方便。那么,我们怎么样做才能让数据持久化呢?我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。程序文件(源文件)、数据文件(从文件功能的角度来分类的)原创 2023-03-29 17:18:08 · 732 阅读 · 14 评论 -
C语言--动态内存管理1
我们目前已知的内存开辟方式是要指定长度的,比如以下这两种方式0 };这些空间开辟的大小时固定的,无法被修改如果是数组,在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配.再比如我们的通讯录,如果我们一开始就确定了人员个数的最大值,那么一旦到达这个上限,就无法继续录入数据了,我们能不能实现一种能根据我们的需求灵活更改空间大小的方式呢?这时候我们就需要动态内存开辟空间了。原创 2023-03-24 16:29:25 · 492 阅读 · 13 评论 -
C语言--自定义类型详解
这个知识在之前的博客中也详细讲过了,这里只简单回顾一下int x;int y;} p1;//声明类型的同时定义变量p1 struct Point p2;//定义结构体变量p2 //初始化:定义变量的同时赋初值。x , y };struct Stu //类型声明 {//名字 int age;//年龄 };//初始化 struct Node {int data;} n1 = {10 , {//结构体嵌套初始化 struct Node n2 = {20 , {原创 2023-03-21 19:45:54 · 1663 阅读 · 19 评论 -
C语言--字符串函数2
第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记, strtok函数将保存它在字符串中的位置strtok函数的第一个参数为 NULL ,函数将 在同一个字符串中被保存的位置开始,查原创 2023-03-15 15:26:37 · 851 阅读 · 27 评论 -
C语言--字符串函数1
我们发现\0是被覆盖掉了的。所以在追加的时候是从\0开始的。我们在使用这个函数的时候要注意以下几点源字符串必须以 ‘\0’ 结束。目标空间必须有足够的大,能容纳下源字符串的内容.目标空间必须可修改.原创 2023-03-11 10:40:45 · 1045 阅读 · 35 评论 -
C语言--模拟实现库函数qsort
qsort是一个库函数,是用来排序的库函数,使用的是快速排序的方法(quicksort)。qsort的好处在于:1,现成的2,可以排序任意类型的数据。。排序的原理是两两相邻的元素进行比较。但是冒泡排序的缺陷就在于只能两两整型进行比较,可现实生活中很多东西的比较并不只是仅仅局限于数字的比较,比如名字的排序等等。但是qsort就可以排序任意类型的数据。原创 2023-03-02 19:59:04 · 754 阅读 · 36 评论 -
C语言--指针进阶2
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。原创 2023-02-27 09:07:38 · 1020 阅读 · 40 评论 -
C语言--指针进阶1
str1和str2由于是两个完全不同的数组,所以所开辟的空间肯定不相同,首元素的地址肯定也不相同。,我们可以把二维数组的每一行看作一个整体,作为一个元素,相当于一维数组是二维数组的数组,所以。我们可以把这个字符串类比成一个数组,同样都是存放的首元素地址,那么二者又有什么不同呢?一维数组传参,形参可以是数组,也可以是指针的,当形参是指针的时候,要注意类型。二维数组传参,参数可以是指针,也可以是数组。,所以在函数传参的时候,传的是首元素地址,代码如下。,而第二种的p指向的是数组的首元素,arr数组是。原创 2023-02-23 20:28:40 · 1651 阅读 · 40 评论 -
C语言--数据的存储2
S占一个比特位这个比较好理解,因为S不是0就是1,所以只用一个比特位来存储即可。而对于M,因为我们知道M是恒大于1小于2的,所以他的形式永远都是1.xxxxxxx.....,所以根据IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去原创 2023-02-15 12:42:49 · 876 阅读 · 43 评论 -
C语言--数据的存储1
根据我们定义的左边为低地址,右边为高地址,**大端(存储)模式**定义为:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。**小端(存储)模式**定义为:数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。速记的口诀是:**小同大异**那么通过我们所学的知识,上述图片中的**F6 FF FF FF就为小端存储模式**。原创 2023-02-08 14:35:51 · 729 阅读 · 27 评论