随笔分类 - C语言基础提高
摘要:看到了一篇不错的文章,特转载之: https://www.cnblogs.com/ssyfj/p/9447628.html 前提. 一维数组和一维指针为什么可以替换使用? int a[3] = { 1, 2, 3 }; int *p = a; for (int i = 0; i < 3; i++)
阅读全文
摘要:联合体的定义格式为: union 联合体名{ 成员列表 }; 结构体和联合体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而联合体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。 介绍下要应用的场景,下位机采集到的数据类型是float型,需要通过串口发送到上位机然后再进行
阅读全文
摘要:这里是说运算结果保留两位小数, 不是说输出结果保留两位小数,如果是输出的话,直接printf("%.2f")就行了。 #include <stdio.h> int main() { // 四舍五入 double sp = 36.51647; sp = ((double)((int)((sp + 0.
阅读全文
摘要:最近协议里面用到了这个东西,每次都要重新写,还怕出错,特记录之: #include <stdio.h> #include <string.h> #define GET_INT_LOW_BYTE0(x) ((x >> 0) & 0x000000FF) /* GET BYTE 0 */ #define
阅读全文
摘要:一. 概述 经常会遇到计算结构体偏移量的需求, 比如有下面这样一个结构体: struct mav_protocol { char header; char seq; short command_id; char payload[256]; int crc32; } p; 需要在传输到对端前填入它的c
阅读全文
摘要:一. 概述 在Linux程序中,经常会看到形如下面的结构体定义 struct xfrm_algo { char alg_name[64]; unsigned int alg_key_len; /* in bits */ char alg_key[0]; }; 这里,最奇怪的是结构体最后一个元素, 是
阅读全文
摘要:Linux 或者 android 下可以通过 strrchr() 函数从指定路径中获取文件名, 这个函数的作用是:查找字符串中最后一个出现的指定字符,它还有一个对应函数 strchr , 可用于: 查找字符串第一个出现的指定字符。使用这两个函数前,需要 #include <string.h> 例:
阅读全文
摘要:在 C 语言中, signed char 类型的范围为 -128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是 -128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗: -2^(n-1)~2^(n-1)-1 (n为整型
阅读全文
摘要:我们在编写代码的过程中经常会遇到一种叫做符号重复定义(Multiple Definition)的错误,这是因为在多个源文件中定义了名字相同的全局变量,并且都将它们初始化了。 例如,在 a.c 中定义了全局变量 global: 在 b.c 中又对 global 进行了定义: 那么在链接时就会出现下面的
阅读全文
摘要:本文转自:http://blog.csdn.net/xingjiarong/article/details/47656339 利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数,下面就结合具体的实例,分类说明一下。 一、引用同一个文件中的变量 如果按照这个顺序,变量 num在
阅读全文
摘要:本文转自:http://blog.csdn.net/keyeagle/article/details/6708077 google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大。所以,我这篇博文
阅读全文
摘要:第一套API函数 动态库代码:DJSocketClient.c 使用该动态库
阅读全文
摘要:一.fgetc和fputc 示例代码 二.fputs和fgets
阅读全文
摘要:一.结构体的定义 1.结构体的定义 2.定义结构体变量的三种方法 a.第一种 b.第二种 c.第三种 二.结构体元素作为函数参数 实例:有如下结构体,分别在堆区和栈区实现结构体元素的赋值,排序和打印。 ●在栈区实现结构体元素的赋值,排序和打印 运行: ●在堆区实现结构体元素的赋值,排序和打印 运行:
阅读全文
摘要:一. 示例 PS:a代表首元素的地址,是一个数组指针。每次向后跳低维的维数,a+1的地址从2291752变成2291772说明向右跳了4*5个字节。 二.结论 三 C语言中关于[]的实际意义 a[i] a[0+i] a(0+i) *(a+i) 四 数组作函数参数时的等价关系 数组函数 等效的指针参数
阅读全文
摘要:一.数组类型 定义一个数组类型: 使用这个数组类型: 二.数组指针类型 定义一个数组指针类型: 使用这个数组指针类型: 三.直接定义指针变量 定义一个数组指针类型: 使用这个数组指针类型:
阅读全文
摘要:一.二级指针的输入模型 打印结果: 二.一级指针的技术推演 输出: 三.二级指针的技术推演
阅读全文
摘要:const 放在*号的左边为指针常量,即:该指针所指向的内存空间不允许被修改。const放在*号的右边为常量指针,即:该指针的指向不允许被修改。 简单的说就是: 假设定义一个结构体 Teacher : 同时提供了一个方法: 此时的p就是一个常量指针,它的值是不能被修改的。 反之: 当const 放在
阅读全文
摘要:一.字符串拷贝 二.不要相信主调函数传入的内存空间 如: 三.数据越界(语法级别的越界) char buf[3] = "abc"; // 事实上还有一个'\0' 四.不断的修改内存指针变量,一定要注意,在释放时,要拿到内存的首地址进行释放。
阅读全文
摘要:一.指针是一种数据类型 1) 指针也是一种变量(从内存的角度看,就是分配四个字节的内存),占有内存空间,用来保存内存地址。 2) 指针变量和它指向的内存块是两个不同的概念。 例:拷贝字符串 运行示意图: 运行结果: 3) 指针是一种数据类型,是指它指向的内存空间的数据类型 这就是为什么int类型的指
阅读全文