C语言学习
arno-1104
情绪稳定中间人
展开
-
typedef 的用法
typedef 的用法 *****以下是参考部分***** 此部分参考自:http://blog.sina.com.cn/u/572f7666010008dm 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, /转载 2016-08-08 22:17:47 · 163 阅读 · 0 评论 -
在数组中进行图形绘制
#include #define k )*2+1#define _ )*2#define s ((((((((((((((((0static unsigned short stop[]={ s _ _ _ _ _ k k k k k _ _ _ k k _, s _ _ _ k k k k k k k k k _ k k k, s _ _ k k k _ _ _ _ _ k k k原创 2016-12-18 15:18:58 · 1331 阅读 · 0 评论 -
可变参数列表的简单实现
使用可变参数列表实现一个sum函数#include #define _AUPBND (sizeof (int) - 1) #define _ADNBND (sizeof (int) - 1) #define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd))) //_bnd(X, bnd)给出了以4字节对齐原创 2016-12-05 18:01:52 · 410 阅读 · 0 评论 -
在显示屏上显示的数字的方法
在现实屏上显示的数字的时候经常需要对数据进行分解,得到数据的每一位再依次显示,方法有很多种,下面介绍经常用到的3种方法第一种方法:不断的利用取整运算与取余运算得到每一位void displaynum1(int Num){ u8 a,b,c,d; d=Num/1000; a=(Num%1000)/100; b=(Num%100)/10; c=Num%10;}优点:理原创 2016-11-30 23:00:16 · 9711 阅读 · 0 评论 -
函数指针实例
#include void fun1(void){ printf("I`m fun1\n");}void fun2(void){ printf("I`m fun2\n");}void fun3(void){ printf("I`m fun3\n");}void fun4(void){ printf("I`m fun4\n");}void fun5(void){原创 2016-12-11 21:06:31 · 340 阅读 · 0 评论 -
窥探引用和指针
C语言面试题里面经常会出现一道题目:向某个指定的内存地址写入特定的数据,譬如向0x1234写入100,做法如下*(int *)0x1234=100;解释一下就是将0x1234利用(int *)强制转换为地址,并使用*这把钥匙打开这块内存,写入数据100,既然如此,可不可以根据这个原理写如下代码:int b=10;int &a=b;关键在第二条语句,创建变量a的同时利用&符号取得a的地址并向里面写入原创 2016-10-03 14:50:43 · 271 阅读 · 0 评论 -
关于数据存储大小端模式的C语言题目
int main(){ int a[5]={1,2,3,4,5}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x,%x",ptr1[-1],*ptr2); return 0;}首先附上1张图片,该图片是我在验证的时候数据的存储方式。这道C语原创 2016-10-02 10:27:42 · 1624 阅读 · 0 评论 -
C语言细节之定义与声明
什么是定义什么是声明,似乎这俩个东西一样但是又有所区别,思考一下,如果你不能直接说出这二者的根本区别,那么本文对你还是有点用处的。首先什么是定义?《C++Primer》第四版 2.3.5节中这么说到:①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。②变量声明:用于向程序表明变量的类型和名字。③定义也是声明:当定义变量时我们声明了它的类型和名字原创 2016-09-27 14:07:31 · 439 阅读 · 0 评论 -
STM32寄存器操作简单介绍
STM32单片机可以使用库函数进行操作,再加上现在越来越强大的MDK ARM编译环境,使用库函数开发简直是不二的选择,但是工具越来越强大的同时意味着对编程人员降低了要求,在很大程度上降低了准入门槛,我们因此高兴吗?我倒是觉得这很像温水煮青蛙,所以库函数固然好用却也不应该抛弃最初的做法——寄存器操作。先从启动文件开始介绍:这里介绍比较常见的一种启动方式(从内部的的FLASH启动,至于另外两个是否原创 2016-09-03 18:43:53 · 12129 阅读 · 0 评论 -
strrev函数
原型: char *strrev(char *s);用法:#include 功能:把字符串s的所有字符的顺序颠倒过来(不包括空字符NULL)。说明:返回指向颠倒顺序后的字符串指针。注意:这个函数直接使用时不能颠倒例如以下的内容:char *forward="string";很显然这里的"string"作为常量放在常量区是不可修改的,而strrev函数的本质就是对forwar原创 2016-08-20 10:52:39 · 5425 阅读 · 1 评论 -
C语言变参的使用
C语言中有很多变参的使用,例如printf()的原型是int printf(const char *fmt, ...),那么C语言是如何解析和处理这些变参的呢?下面进行简单的总结:C语言中定义了下面的一些宏,专门用来处理变参:va_start(va_list ap, char *fmt)va_arg(va_list ap , Type) //Type是指参数的类型(比如int、ch转载 2016-08-11 16:19:20 · 480 阅读 · 0 评论 -
strstr函数的精彩之处
在C的库函数里面有很多精彩的代码,仔细分析会体会到这些写法和思路的巧妙之处。原创 2016-08-16 22:24:58 · 430 阅读 · 0 评论 -
串口网口数据帧解析(支持连包、断传、错误数据过滤)
本文转载自:https://blog.csdn.net/hwb_1988/article/details/45872379嵌入式系统中,关于数据接受部分确实思考了很多,下面总结下个人经验。 关于串口传输,个人觉得采用modbus协议来接受数据是比较合理的,采用3.5char字符的超时机制,接受的时候如果判断超时,就当作一帧数据进行处理,所以这种情况,帧格式没有那么讲解,发送...转载 2018-07-21 16:18:34 · 3488 阅读 · 0 评论