- 博客(43)
- 收藏
- 关注
原创 【C语言】宏经典练习题,交换奇偶位
只需要对该二进制位进行按位与01010101即可,而01010101的十六进制数为0x55555555再向前移动一位就可变成偶数位。而偶数位同理,将二进制数与10101010进行按位与操作即可,10101010的十六进制数为0xaaaaaaaa再向后移动一位。奇数位01010101。写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。假设这个数的二进制是11111111。
2025-05-12 14:54:53
238
原创 【C语言】程序的预处理,#define详解
文章主要介绍了C语言中的预处理指令及其应用。首先,通过#define可以定义标识符和宏,标识符用于替换代码中的特定内容,而宏则可以进行简单的条件判断和参数替换。文章还介绍了#和##的用法,#将宏参数转换为字符串,##用于连接两个符号。接着,讨论了宏与函数的优缺点,宏在编译时展开,执行效率高,但可能导致代码膨胀和调试困难。此外,#undef用于移除宏定义。文章还介绍了条件编译,通过#if、#elif、#else和#endif实现选择性编译,并展示了如何判断宏是否定义。最后,提供了两种解决头文件多次包含问题的方
2025-05-11 15:52:19
183
原创 【C语言】单身狗问题or找不同问题用异或来解决
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。有数组的元素是:1,2,3,4,5,1,2,3,4,6。编写一个函数找出这两个只出现一次的数字。只有5和6只出现1次,要找出5和6.
2025-05-10 16:15:32
112
原创 【C语言】文本操作函数fseek、ftell、rewind
重新定位文件指针的位置,使其指向以origin为基准、偏移offset字节的位置。成功返回0,失败返回非零值(通常为-1。
2025-05-01 15:21:37
435
原创 【C语言】文本操作函数fgetc、fputc、fgets、fputs、fprintf、fscanf、fread、fwrite
从文件中读取信息,每次读取一个字符从建盘中输入信息到文件中,每次输入一个字符。
2025-04-23 19:42:20
929
原创 【C语言】柔性数组
如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以你不能指望用户来发现这个事。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。这样柔性数组成员a,相当于获得了100个整型元素的连续空间。连续的内存有益于提高访问速度,也有益于减少内存碎片。第一个好处是:方便内存释放。大小不包括柔性数组的内存。
2025-03-30 16:40:13
151
原创 【C语言】动态内存管理用realloc管理更灵活
在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。由于上述的两种情况,realloc函数的使用就要注意一些。realloc——动态内存空间管理更灵活。
2025-03-16 14:32:55
237
原创 【C语言】动态内存开辟与释放函数malloc和free
所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。(要进行强制类型转化)如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。如果参数size为0,malloc的行为是标准是未定义的,取决于编译器。这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果参数ptr是NULL指针,则函数什么事都不做。如果开辟成功,则返回一个指向开辟好空间的指针。
2025-03-16 13:07:54
148
原创 【C语言】内存操作函数memcpy、memmove、memset(最最最好懂)
memmove( )比 memcpy( )更安全,在目标区域和源区域有重叠的情况下,memmove( )的拷贝确保源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改,但目标区域与源区域没有重叠情况时与memcy( )函数相同。将一块内存区域的每个字节设置为指定的值。memmove——重叠内存的拷贝。模拟实现my_memmove函数。模拟实现my_memcpy函数。memset——内存设置函数。memcpy——内存块复制。从源头指向的内存块拷贝固定。的数据到目标指向的内存块。
2025-03-12 16:27:19
310
原创 【C语言】寻找错误信息用strerror或perror函数(最最最好懂)
相当于perror = printf + strerror。直接打印错误信息,在打印错误信息前会先打印自定义信息。perror——返回错误码对应的错误信息更简单。strerror——返回错误码对应的错误信息。多使用strsrror查bug。把错误码翻译成错误信息。
2025-03-11 19:53:32
240
原创 【C语言】字符串的查找用strstr、strtok(最最最好懂)
返回一个指向haystack中第一次出现needle的指针。如果未找到子字符串,则返回NULL。strstr( )函数用于查找子字符串在主字符串中的第一次出现。自己写my_strstr函数实现字符串查找功能。strstr——字符串的查找。
2025-03-10 19:05:39
168
原创 【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
310
原创 【C语言】冒泡排序及使用回调函数方法
运用循环的方法,从左到右相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。一个通过函数指针调用的函数,如果把函数指针(地址)作为参数传递给另一个函数,这个指针被用来调用其指向的函数时,就叫回调函数。用回调函数模拟实现qsort,采用冒泡方式。
2025-02-26 18:25:57
202
原创 【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
178
原创 【C语言】理解函数strcat、strcpy、strcmp、strstr使用方法(最最最好懂)
用于追加字符串的函数,即将一个字符串中的内容追加到另一个字符串后面(不会覆盖原字符串内容)。结果为DE(arr1中的ABC被arr2中的DE完全覆盖)比较的是两个字符串中对应位置字符的ASCII值。将一个字符串中的内容拷贝到另一个字符串中(结果为 hello world。比较两个字符串内容的函数。
2025-02-25 18:15:55
205
原创 【C语言】字符串左旋与字符串逆序大同小异
实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDA。ABCD左旋两个字符得到CDAB。BA GFEDC 左逆序 右逆序。方法二:部分左旋再整体左旋。CDEFGAB 整体逆序。方法一:利用循环进行左旋。
2025-02-25 17:03:40
159
原创 【C语言】在杨氏矩阵中查找一个数是否存在
杨氏矩阵:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。可以运用数组,也可以运用指针进行查找。要求:时间复杂度小于O(N);
2025-02-25 16:00:57
100
原创 【C语言】猜名次,猜凶手很easy
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。已知3个人说了真话,1个人说的是假话。
2025-02-15 10:43:30
134
原创 【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
107
原创 【C语言】用指针来输出数组内元素
int *p = arr 是指取数组arr首元素的地址,*(p+i)是指在首元素地址的基础上往前推进地址。int (* p) [10] = &arr 是指取整个数组的地址。(* p) [ i ] 是指通过数组下标找到地址再找到对应数值。
2025-02-10 21:48:58
126
原创 【C语言】字符型在内存中存储,区分signed和unsigned
unsigned在循环中使用易出现死循环qing'k。signed和unsigned 在内存中存储的区别。signed和unsigned相加减计算。
2025-02-09 16:21:48
124
原创 【C语言】实现判断序列是否有序
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。输出为一行,如果序列有序输出sorted,否则输出unsorted。思路:设置两个数组分别代表正序和逆序,再进行分别判断。3≤n≤50 序列中的值都满足1≤val≤100。第二行输入N个整数,用空格分隔N个整数。第一行输入一个整数N(3≤N≤50)。
2025-02-07 23:32:19
130
原创 【C语言】将两个序列合成一个序列,比较后排序输出
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。输出为一行,输出长度为n + m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。第二行包含n个整数,用空格分隔。第三行包含m个整数,用空格分隔。
2025-02-07 23:26:02
126
原创 【C语言】大小端总结
低地址 高地址。低地址 高地址。高位字节内容→低地址。高位字节内容→高地址。大端存储:11 22 33 44。小端存储:44 33 22 11。一般情况下,int存储都为小端存储。大端存储:低位字节内容→高地址。小端存储:低位字节内容→低地址。大小端是指数据存储的两种模式。
2025-02-07 23:19:12
112
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人