随笔分类 -  C 语言

摘要:C语言中的左移和右移运算符 左移(<<)和右移(>>)运算符是C语言中对二进制位进行移动的操作符。让我用最简单的方式解释给你听。 1. 基本概念:把二进制位想象成排队的人 想象二进制数就像一排人,每个人代表一个二进制位(0或1): text 数字 13 的二进制:1 1 0 1 位置: 第3人 第2 阅读全文
posted @ 2025-09-28 17:27 [BORUTO] 阅读(352) 评论(0) 推荐(0)
摘要:。。。 阅读全文
posted @ 2025-09-28 15:55 [BORUTO] 阅读(16) 评论(0) 推荐(0)
摘要:我们同样使用C语言实现十六进制到十进制的转换。十六进制数通常以字符串形式表示,包含0-9和A-F(或a-f)字符。转换的原理是:从字符串的最左边(最高位)开始,将每个字符转换成对应的数值(0-15),然后乘以16的相应次幂(从最高位开始,幂次递减),最后求和。 注意:我们也要考虑十六进制字符串可能带 阅读全文
posted @ 2025-09-28 15:54 [BORUTO] 阅读(230) 评论(0) 推荐(0)
摘要:。。。 阅读全文
posted @ 2025-09-28 15:54 [BORUTO] 阅读(4) 评论(0) 推荐(0)
摘要:我们首先理解十进制转十六进制的原理,然后给出几种C语言实现方法。原理:不断除以16,记录余数,余数范围0-15,其中10-15用字母A-F表示。然后将余数倒序排列。 步骤: 用十进制数除以16,记录余数。 将商作为新的被除数,重复步骤1,直到商为0。 将余数倒序排列,如果余数在10-15之间,转换为 阅读全文
posted @ 2025-09-28 15:53 [BORUTO] 阅读(225) 评论(0) 推荐(0)
摘要:我们同样从原理出发,然后给出几种C语言的实现方法。二进制转十进制的原理:将二进制数的每一位乘以2的相应次幂(从右往左,第0位是2^0,第1位是2^1,...),然后将这些乘积相加。 例如:二进制数1101转换为十进制1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 8 + 4 + 0 阅读全文
posted @ 2025-09-28 15:51 [BORUTO] 阅读(169) 评论(0) 推荐(0)
摘要:我们通常使用“除2取余,逆序排列”的方法来将十进制整数转换为二进制。步骤如下: 将十进制数除以2,记录商和余数(余数只能是0或1)。 继续用上一步的商除以2,再次记录商和余数。 重复步骤2,直到商为0为止。 将得到的余数逆序排列,就是对应的二进制数。 例如,将十进制数10转换为二进制:10 / 2 阅读全文
posted @ 2025-09-28 15:40 [BORUTO] 阅读(119) 评论(0) 推荐(0)
摘要:在C语言中,回调函数(Callback Function)是一种非常重要的编程技术。回调函数是指一个通过函数指针调用的函数。简单来说,如果你将一个函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。 在C语言中,回调函数(Callback Func 阅读全文
posted @ 2025-05-29 14:25 [BORUTO] 阅读(223) 评论(0) 推荐(0)
摘要:1. 返回局部变量的地址 在C语言中,返回局部变量的地址是不安全的行为,因为一旦函数执行完毕,局部变量的内存将被释放,返回的地址将指向未定义的内存区域,这将导致不可预知的行为。 以下是一个返回局部变量引用的例子,这是错误的做法: #include <stdio.h> int* getVarAddr( 阅读全文
posted @ 2024-12-31 11:38 [BORUTO] 阅读(196) 评论(0) 推荐(0)
摘要:一般这种乱码问题是字符串没有初始化,如下:recvBuffer未初始化 char recvBuffer[1024]; result = recv(clientSocket, recvBuffer, sizeof(recvBuffer), 0); // 接收来自客户端的数据 recvBuffer初始化 阅读全文
posted @ 2024-12-29 18:43 [BORUTO] 阅读(84) 评论(0) 推荐(0)
摘要:一、memcpy() 1、memcpy函数原型 作用:将num 个字节的值从source 指向的位置直接复制到destination 指向的内存块。 void * memcpy ( void * destination, const void * source, size_t num ); 参数解释 阅读全文
posted @ 2024-11-25 14:13 [BORUTO] 阅读(936) 评论(0) 推荐(0)
摘要:前言 指针和数组存在着一些本质的区别。当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作 为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一种比较特殊的情况而已,在本质上,两者是有区别的。 下面来看看详细的介绍。 char *a = 阅读全文
posted @ 2024-05-07 14:38 [BORUTO] 阅读(2397) 评论(0) 推荐(0)
摘要:在C语言中,可以使用以下几种方法来实现字符串拼接: 1. 使用strcat函数: #include <stdio.h> #include <string.h> int main() { char str1[50] = "Hello"; char str2[] = "World"; strcat(st 阅读全文
posted @ 2024-04-23 11:48 [BORUTO] 阅读(1491) 评论(0) 推荐(0)
摘要:1、截取指定长度的字符 在C语言中,没有内置的函数可以直接截取字符串。但是,你可以通过创建一个函数来实现这个功能。以下是一个简单的示例,展示了如何截取一个指定长度的字符串: #include <stdio.h> #include <string.h> void substr(char* dest, 阅读全文
posted @ 2024-04-23 10:01 [BORUTO] 阅读(762) 评论(0) 推荐(0)
摘要:C语言中分割字符串有多种实现方法,下面我将介绍其中几种不同的方法: 1、使用strtok函数 char *strtok(char *str, const char *delim); strtok函数可以根据指定的分隔符拆分字符串。其原型如下: #include <stdio.h> #include 阅读全文
posted @ 2024-03-21 15:02 [BORUTO] 阅读(5820) 评论(0) 推荐(1)
摘要:内联函数 在C语言中,内联函数(Inline Function)是一种用于优化代码执行效率的机制。内联函数在编译时将函数的代码直接插入到调用它的地方,而不是通过函数调用的方式执行,从而减少了函数调用的开销,提高了代码的执行速度。 C语言的内联函数使用 inline 关键字来声明。将函数声明为内联函数 阅读全文
posted @ 2023-10-11 13:59 [BORUTO] 阅读(393) 评论(0) 推荐(0)
摘要:1、内存分区 可将内存简单分为:栈区、堆区、静态区,其中静态区包含数据段、代码段的内容,主要存储常量、字符串常量等只读数据、已初始化的全局变量和静态变量以及未初始化的全局变量和静态变量。 堆栈主要指的是栈,而不是堆。 1.1 栈区(Stack) 定义:栈区用于存储函数的局部变量、函数参数和返回地址。 阅读全文
posted @ 2023-10-11 13:53 [BORUTO] 阅读(76) 评论(0) 推荐(0)
摘要:1、C 命令行参数 执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。 命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数 阅读全文
posted @ 2023-10-11 13:53 [BORUTO] 阅读(173) 评论(0) 推荐(0)
摘要:C 可变参数 有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数。 C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数。 声明方式为: int func_name(int arg1, ...); 其中,省略号 ... 表示可 阅读全文
posted @ 2023-10-11 13:52 [BORUTO] 阅读(40) 评论(0) 推荐(0)
摘要:C语言 递归 递归指的是在函数的定义中使用函数自身的方法。 举个例子:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢 阅读全文
posted @ 2023-10-11 13:51 [BORUTO] 阅读(71) 评论(0) 推荐(0)