- 博客(13)
- 收藏
- 关注
原创 一篇文章,弄懂动态内存管理
因此,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次。可是在我们运行程序时,很多时候内存的大小是要在运行程序的过程中才知道的,这就意味着对提前申请的静态空间,可能造成空间的浪费或者溢出。如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。:重新分配原有内存块的大小,在不丢失原有内存块中数据的前提下,合理扩大或缩小内存。从上面的写法对比,可以总从上面的写法对比,可以总结出柔性数组的好处。就可以把所有的内存也给释放掉。
2026-10-07 12:09:22
262
原创 一篇文章,看懂自定义类型联合与枚举类型
所以我们就可以把公共属性单独写出来,剩余属于各种商品本身的属性使用联合体组合起来,这样就可以减少所需的内存空间,一定程度上节省了内存。如上定义的enum Color是枚举类型,{}中的值就是枚举类型可能的取值又叫做枚举常量。在声明枚举类型时,可以赋初值。和结构体类似,联合体也是由一个或多个成员组成,成员可以是不同类型的。联合体的成员是共用一片空间的,联合体空间的大小,至少是最大成员的空间大小。枚举顾名思义就是一一列举,把可以列举的值一一列举出来,枚举的关键字是。书名,作者,页数,设计,颜色,尺寸。
2026-10-06 16:31:05
357
原创 一篇文章,了解自定义类型:结构体
位段的成员必须是 int、unsigned int 或 signed int;在 C99 中,位段成员的类型也可以选择其他整型家族类型,比如 char。位段的成员名后边有一个冒号和一个数字。
2026-10-06 11:16:33
258
原创 一篇文章,吃透数据在内存中的存储
比如保存 1.01 的时候,只保存 01,等到读取的时候,再把第一位的 1 加上去。这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8 bit 位,但是在 C 语言中除了 8 bit 的 char 之外,还有 16 bit 的 short 型,32 bit 的 long 型(要看具体的编译器)。但是,我们知道,科学计数法中的 E 是可以出现负数的,所以 IEEE 754 规定,存入内存时 E 的真实值必须再加上一个中间数,对于 8 位的 E,这个中间数是 127;
2026-10-05 15:37:25
337
原创 看完这篇文章,悟透字符函数和字符串函数
strstr 函数,查找 str2 指向的字符串在 str1 指向的字符串中第一次出现的位置。• strcat 函数在追加的时候要将源字符串的所有内容,包含 \0 都追加过去,但是 strncat 函数指定了追加的长度。:字符串追加,把 source 指向的源字符串中的num个字符追加到 destination 指向的空间中。:字符串追加,把 source 指向的源字符串中的所有字符都追加到 destination 指向的空间中。:字符串拷贝,拷贝到源头字符串中的\0为止,拷贝字符的个数为num;
2026-10-03 20:36:21
427
4
原创 C 语言指针从入门到避坑:把指针踩在脚底(5)
qsort是一个库函数,头文件是<stdlib.h>。它是用来对数据进行排序的(基于快速排序的思想,对数据进行排序),可以对任意数据类型进行排序。回调函数用形象话的语言描述就是,B,C,D,E函数的指针(地址)分别作为参数传入A函数中,最后再由指针回调函数的时候,这时被调用的函数就是。这种方法默认的是升序排列,若降序只需调换p1和p2的顺序例,如 若 p2指向的数据>p1指向的数据,返回值>0。在使用qsort前,我们要知道使用qsort时,必须要传入的四个参数。这里以冒泡排序为例子来模拟实现qsort。
2026-09-30 16:58:53
350
2
原创 C 语言指针从入门到避坑:把指针踩在脚底(4)
但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。因为str1与str2是数组,它们先向内存申请空间地址,再存放hello bit. 它们只是存放的的内容相同,但是str1与str2比较的本质是数组的起始地址,所以结果是。前文所说二维数组的元素是一维数组(每一行),所以当二维数组传参时,传的也是首元素的地址,即第一行(一维数组)。该数组中存放的函数指针都是**int(*)(int,int)**类型的。类比前文,函数指针————指向函数的指针变量,用来存放函数的地址。
2026-09-27 18:01:13
506
3
原创 C 语言指针从入门到避坑:把指针踩在脚底(2)
strlen的作用是用来求字符串的长度的,即\0之前字符的个数,在使用strlen之前要包括库函数<string.h>。但需要注意的是,被 const 修饰的变量本质上仍然是变量,只是被限制了修改权限。当指针变量指向一块区域的时候,我们可以通过指针变量访问该区域,在后期不在使用指针访问该区域时,我们可以把指针置为NULL,因为有一个。当创建指针时如果知道指针指向的内容,就指向其地址,如果不知道就让指针指向NULL。这种向函数传入地址的情况叫传址调用,很明显,这种通过指针的方式,才能解决这个问题。
2026-09-20 17:21:35
403
3
原创 C语言指针详解:初识指针(1)
void* 是无类型的指针(泛型指针),可以接收任何类型变量的地址,但是不能进行解应用以及指针 ± 的操作。在数组的学习中,可以知道,数组中元素内存是紧挨着存放的,这意味着只要我们知道数组中某个元素的地址,就可以顺藤摸瓜访问数组的所有元素。前文所说,指针变量是用来存放地址的,所以指针变量的大小与指针变量的类型无关,只与指针变量所存放的地址大小有关。指针变量的大小取决于计算机环境,无论是何种类型指针变量的大小都相同,这是否意味着指针类型毫无作用?同理,我们亦或通过指针 - 指针的方法,推算数组的元素个数。
2026-09-17 17:55:11
178
1
原创 C 语言数组详解:一篇文章搞定数组
数组是 C 语言中最基础也最常用的数据结构之一,它让我们能够以统一的方式存储和访问大量同类型数据。无论是处理成绩、字符串还是矩阵运算,数组都是不可或缺的工具。本文将从一维数组讲起,逐步深入到二维数组,帮助你系统掌握数组的创建、初始化与应用。
2026-09-13 16:09:17
257
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅