随笔分类 -  C语言

摘要:计算实现CRC16, 可以通过配置,初值、多项式、输出入是否反转、输出是否反转、结果异或值来选定不同的模式。 /* ******************************************************************************************** 阅读全文
posted @ 2021-05-24 18:15 doitjust 阅读(1175) 评论(0) 推荐(0)
摘要:Makefile知识点 阅读全文
posted @ 2021-05-11 09:14 doitjust 阅读(55) 评论(0) 推荐(1)
摘要:注释格式 /* **************************************************************************************************** * 函 数 名: my_hal_printf * 函数功能: 打印数据 * 形 参 阅读全文
posted @ 2021-03-11 10:16 doitjust 阅读(509) 评论(0) 推荐(0)
摘要:在编译线程的c文件时,出现 pthread.c:(.text+0xa2):对‘pthread_create’未定义的引用 pthread.c:(.text+0xd2):对‘pthread_join’未定义的引用 这样的提示。 原因:编译的时候没有加上 -lphread 需要这样编译: gcc pth 阅读全文
posted @ 2021-02-24 14:56 doitjust 阅读(423) 评论(0) 推荐(0)
摘要:定义 如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数(Callback Function)。 示例 回调函数示例:void func( void (*f)(void *) , void *p); 调用者 实现者 1. 提供一个回调函数,再提供一个准备传 阅读全文
posted @ 2020-11-14 13:59 doitjust 阅读(575) 评论(0) 推荐(1)
摘要:封装打印,区分颜色,显示文件名,函数名和行号 01_test_printf.c #include <stdio.h> #define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_GREEN "\x1b[32m" #define ANSI_COLOR_YE 阅读全文
posted @ 2020-11-05 19:33 doitjust 阅读(147) 评论(0) 推荐(0)
摘要:1 #include <stdio.h> 2 3 void foo(void) 4 { 5 unsigned int a = 6; 6 int b = -20; 7 (a+b>6)?puts(">6"):puts("<6"); 8 } 9 10 int main(void) 11 { 12 foo( 阅读全文
posted @ 2019-09-15 08:55 doitjust 阅读(788) 评论(0) 推荐(0)
摘要:先看下面的例子: int a[5]; 所有人定明白这里定义了一个数组,其包含了5个int型的数据。我们可以用 a[0]、a[1]等来访问数组里面的每一个元素,那么这些元素的名字就是a[0]、a[1]...吗? 如图所示,当我们定义一个数组a时,编译器根据指定的元素个数和元素类型分配确定大小(元素类型 阅读全文
posted @ 2019-08-08 00:08 doitjust 阅读(422) 评论(0) 推荐(0)
摘要:简单而言,出现在赋值符“=”右边的就是右值,出现在赋值符“=”左边的就是左值。 比如,x=y。 左值:在这个上下文环境中,编译器认为x的含义是x所代表的地址。这个地址只有编译器知道,在编译的时候确定,编译器在一个特定的区域保存这个地址,我们完全不必考虑这个地址保存在哪里。 右值:在这个上下文环境中, 阅读全文
posted @ 2019-08-08 00:07 doitjust 阅读(1354) 评论(0) 推荐(0)
摘要:这里 &a[0] 和 &a 到底是什么区别呢? a[0]是一个元素,a是整个数组,虽然&a[0] 和 &a 的值一样,但其意义不一样。前者是数组首元素的首地址,而后者数数组的首地址。 举个例子:湖南的省政府在长沙,而长沙的市政府也在长沙。两个政府都在长沙,但其代表的意义完全不同。 阅读全文
posted @ 2019-08-07 23:43 doitjust 阅读(1082) 评论(0) 推荐(0)
摘要:假设现在需要往内存地址0x12ff7c上存入一个整型数0x100,那么怎样才能做到呢? 我们知道可以通过一个指针向其指向的内存地址写入数据,那么这里的内存地址0x12ff7c其本质不就是一个指针嘛,所以我们可以用下面的方法: int *p = (int *)0x12ff7c; *p = 0x100; 阅读全文
posted @ 2019-08-07 22:14 doitjust 阅读(3423) 评论(0) 推荐(2)
摘要:很多初学者搜无法分清这两者之间的区别。先看下面的代码: int *p = NULL; 这时候我们可以通过调试器查看p的值为0x00000000。这句代码的意思是:定义一个指针变量p,其指向的内存里面保存的是int类型的数据;在定义变量p的同时,把p的值设置为0x00000000,而不是把*p的值设置 阅读全文
posted @ 2019-08-07 21:54 doitjust 阅读(1159) 评论(0) 推荐(0)
摘要:指针变量p前的“*”号作用? 这里这个“*”号怎么理解呢?举个例子:当你回到家门口时,你想进屋第1件事就是拿出钥匙来开锁,试想防盗门的锁芯是不是很像这个“*”号?你要进屋必须要用钥匙,试想防盗门的锁芯是不是很像这个“*”号?你要进入必须要用钥匙,那你去读/写一块内存是不是也要一把钥匙呢?这个“*”号 阅读全文
posted @ 2019-08-07 21:32 doitjust 阅读(154) 评论(0) 推荐(0)
摘要:指针的内存布局 先看下面的例子 int *p; 大家都知道这是定义了一个指针p,但是p到底是什么东西呢?还记得第1章里说过“任何数据类型我们都可以把它当成一个模子”吗?p,毫无疑问,是某个模子“咔”出来的。我们也讨论过,任何模子都必须有特定的大小,这样才能“咔咔咔”。那“咔”出p这个模子到底是什么样 阅读全文
posted @ 2019-08-07 08:59 doitjust 阅读(377) 评论(0) 推荐(0)