- 博客(35)
- 收藏
- 关注
原创 【C语言】柔性数组
如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以你不能指望用户来发现这个事。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。这样柔性数组成员a,相当于获得了100个整型元素的连续空间。连续的内存有益于提高访问速度,也有益于减少内存碎片。第一个好处是:方便内存释放。大小不包括柔性数组的内存。
2025-03-30 16:40:13
140
原创 【C语言】动态内存管理用realloc管理更灵活
在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。由于上述的两种情况,realloc函数的使用就要注意一些。realloc——动态内存空间管理更灵活。
2025-03-16 14:32:55
215
原创 【C语言】动态内存开辟与释放函数malloc和free
所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。(要进行强制类型转化)如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。如果参数size为0,malloc的行为是标准是未定义的,取决于编译器。这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果参数ptr是NULL指针,则函数什么事都不做。如果开辟成功,则返回一个指向开辟好空间的指针。
2025-03-16 13:07:54
131
原创 【C语言】内存操作函数memcpy、memmove、memset(最最最好懂)
memmove( )比 memcpy( )更安全,在目标区域和源区域有重叠的情况下,memmove( )的拷贝确保源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改,但目标区域与源区域没有重叠情况时与memcy( )函数相同。将一块内存区域的每个字节设置为指定的值。memmove——重叠内存的拷贝。模拟实现my_memmove函数。模拟实现my_memcpy函数。memset——内存设置函数。memcpy——内存块复制。从源头指向的内存块拷贝固定。的数据到目标指向的内存块。
2025-03-12 16:27:19
288
原创 【C语言】寻找错误信息用strerror或perror函数(最最最好懂)
相当于perror = printf + strerror。直接打印错误信息,在打印错误信息前会先打印自定义信息。perror——返回错误码对应的错误信息更简单。strerror——返回错误码对应的错误信息。多使用strsrror查bug。把错误码翻译成错误信息。
2025-03-11 19:53:32
223
原创 【C语言】字符串的查找用strstr、strtok(最最最好懂)
返回一个指向haystack中第一次出现needle的指针。如果未找到子字符串,则返回NULL。strstr( )函数用于查找子字符串在主字符串中的第一次出现。自己写my_strstr函数实现字符串查找功能。strstr——字符串的查找。
2025-03-10 19:05:39
153
原创 【C语言】理解函数strncat、strncpy、strncmp使用方法(最最最好懂)
char* strncat(char* dest, const char* src, int n)中n的作用。strncpy函数用于将一个字符串复制到另一个字符串。设置为 5,这样函数最多只会复制 5 个字符到。中,只需要追加其中的一部分。剩余空间只能容纳 5 个字符,那么可以将。的值来控制追加的字符数量。,我们只需要追加前 3 个字符,就可以将。str1>str2 返回大于0的数。str1<str2 返回小于0的数。的剩余空间有限时,使用。结果为abcxxxxxxx。str1=str2 返回0。
2025-03-06 21:15:00
281
原创 【C语言】冒泡排序及使用回调函数方法
运用循环的方法,从左到右相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。一个通过函数指针调用的函数,如果把函数指针(地址)作为参数传递给另一个函数,这个指针被用来调用其指向的函数时,就叫回调函数。用回调函数模拟实现qsort,采用冒泡方式。
2025-02-26 18:25:57
195
原创 【C语言】查找字符串旋转结果(字符串左旋进阶版)两种方法
连用两个arr1,AABCDAABCD在这个字符串里面找是否有arr2。写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 = AABCD和s2 = BCDAA,返回1。给定s1 = abcd和s2 = ACBD,返回0.AABCD左旋一个字符得到ABCDA。AABCD左旋两个字符得到BCDAA。AABCD右旋一个字符得到DAABC。
2025-02-25 20:27:34
171
原创 【C语言】理解函数strcat、strcpy、strcmp、strstr使用方法(最最最好懂)
用于追加字符串的函数,即将一个字符串中的内容追加到另一个字符串后面(不会覆盖原字符串内容)。结果为DE(arr1中的ABC被arr2中的DE完全覆盖)比较的是两个字符串中对应位置字符的ASCII值。将一个字符串中的内容拷贝到另一个字符串中(结果为 hello world。比较两个字符串内容的函数。
2025-02-25 18:15:55
190
原创 【C语言】字符串左旋与字符串逆序大同小异
实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDA。ABCD左旋两个字符得到CDAB。BA GFEDC 左逆序 右逆序。方法二:部分左旋再整体左旋。CDEFGAB 整体逆序。方法一:利用循环进行左旋。
2025-02-25 17:03:40
155
原创 【C语言】在杨氏矩阵中查找一个数是否存在
杨氏矩阵:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。可以运用数组,也可以运用指针进行查找。要求:时间复杂度小于O(N);
2025-02-25 16:00:57
92
原创 【C语言】猜名次,猜凶手很easy
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。已知3个人说了真话,1个人说的是假话。
2025-02-15 10:43:30
128
原创 【C语言】用指针来输出二维数组
指的是一个有10个元素的数组 p,这个数组 p 的类型是 int * 型,指向的是数组p首元素的地址,元素的类型都是 int 型。下列代码中的数组是二维数组,int ( * p) [ 4 ]是指取到数组 p 首元素的地址,再运用循环的形式找到下一行的元素。区别 int * p [10] 与 int ( * p) [10]指的是一个数组 p 有10个元素,每个元素的类型都是 int *型。
2025-02-12 20:04:02
101
原创 【C语言】用指针来输出数组内元素
int *p = arr 是指取数组arr首元素的地址,*(p+i)是指在首元素地址的基础上往前推进地址。int (* p) [10] = &arr 是指取整个数组的地址。(* p) [ i ] 是指通过数组下标找到地址再找到对应数值。
2025-02-10 21:48:58
111
原创 【C语言】字符型在内存中存储,区分signed和unsigned
unsigned在循环中使用易出现死循环qing'k。signed和unsigned 在内存中存储的区别。signed和unsigned相加减计算。
2025-02-09 16:21:48
119
原创 【C语言】实现判断序列是否有序
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。输出为一行,如果序列有序输出sorted,否则输出unsorted。思路:设置两个数组分别代表正序和逆序,再进行分别判断。3≤n≤50 序列中的值都满足1≤val≤100。第二行输入N个整数,用空格分隔N个整数。第一行输入一个整数N(3≤N≤50)。
2025-02-07 23:32:19
115
原创 【C语言】将两个序列合成一个序列,比较后排序输出
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。输出为一行,输出长度为n + m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。第二行包含n个整数,用空格分隔。第三行包含m个整数,用空格分隔。
2025-02-07 23:26:02
109
原创 【C语言】大小端总结
低地址 高地址。低地址 高地址。高位字节内容→低地址。高位字节内容→高地址。大端存储:11 22 33 44。小端存储:44 33 22 11。一般情况下,int存储都为小端存储。大端存储:低位字节内容→高地址。小端存储:低位字节内容→低地址。大小端是指数据存储的两种模式。
2025-02-07 23:19:12
104
原创 【C语言】assert和const使用使代码更严谨
assert中可以放一个表达式,如果表达式正确则正常运行,如果表达式错误则。被const修饰后不可修改变量,修饰。使*arr不可修改而arr可修改。使arr不可修改而*arr可修改。
2025-01-31 20:13:14
213
原创 【C语言】求水仙花数
如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身。求出0~100000之间的所有“水仙花数”并输出。函数几次方求法用pow(2,n) 解释为2^n。
2025-01-30 23:07:00
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人