随笔分类 -  C语言

摘要:01: 防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H//头文件内容#endif 02: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef unsigned char boolean; /* Boolean 阅读全文
posted @ 2016-08-30 10:28 SuGuolin 阅读(1848) 评论(0) 推荐(0)
摘要:#define max(x,y,z) ((x)>(y)?(x):(y))>(z)?((x)>(y)?(x):(y)):(z) #define min(x,y,z) ((x)<(y)?(x):(y))<(z)?((x)<(y)?(x):(y)):(z) 阅读全文
posted @ 2016-08-18 16:20 SuGuolin 阅读(519) 评论(0) 推荐(0)
摘要:这段代码在C语言是编译不通过,因为C语言不支持表达式不赋值;在C++可以编译过。 C++里的a=b=3;与C语言一样,但是C++还有一种写法(a=b)=10,这样的是b的值赋给a,然后又把10赋给a,但是10没有赋给b;这里涉及到运算符重载的知识。 C++ C语言 C++ 阅读全文
posted @ 2016-05-15 18:30 SuGuolin 阅读(4385) 评论(0) 推荐(0)
摘要:错误的做法: [1] (A)不检查指针的有效性,说明答题者不注重代码的健壮性。 (B)检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这 阅读全文
posted @ 2016-05-10 14:49 SuGuolin 阅读(7773) 评论(0) 推荐(0)
摘要:#include /* date type defination */ typedef signed char rt_int8_t; typedef signed short rt_int16_t; typedef signed long rt_int32_t; typedef unsigned char rt_uint8_t; typedef unsigne... 阅读全文
posted @ 2016-05-03 22:09 SuGuolin 阅读(513) 评论(0) 推荐(0)
摘要:最近在做的项目需求cc2540在处理数据过程中要把时间戳转换成日期格式,一开始我在网上一直找对应的函数网上都是利用C标准库来处理,由于IAR里的C51库没有time.c,所以无法调用。后来在QQ群里有人说可以用BLE的OSAL_ClockBLE.c里的函数直接转换 阅读全文
posted @ 2016-04-07 14:10 SuGuolin 阅读(1133) 评论(0) 推荐(0)
摘要:什么是结构体对齐访问(1)结构体中元素的访问其实本质上还是用指针方式,结合这个元素在整个结构体中的偏移量和这个元素的类型来进行访问的。(2)但是实际上结构体的元素的偏移量比较复杂,因为结构体要考虑元素的对齐访问,所以每个元素时间占的字节数和自己本身的类型所占的字节数不一定完全一样。(譬如char c... 阅读全文
posted @ 2015-12-06 18:17 SuGuolin 阅读(447) 评论(0) 推荐(0)
摘要:字符串和字符数组的细节 1、 sizeof是C语言的一个关键字,也是C语言的一个运算符(sizeof使用时是sizeof(类型或变量名),所以很多人误以为sizeof是函数,其实不是); sizeof运算符用来返回一个类型或者是变量所占用的内存字节数。为什么需要sizeof?主要... 阅读全文
posted @ 2015-11-25 23:55 SuGuolin 阅读(4803) 评论(0) 推荐(1)
摘要:存储数据的模式1、大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;2、小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的... 阅读全文
posted @ 2015-11-19 08:56 SuGuolin 阅读(393) 评论(0) 推荐(0)
摘要:内存对齐,memory alignment.为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。内存对齐一般讲就是cpu access memory的效率(提高运行速度)和准确性... 阅读全文
posted @ 2015-11-18 18:15 SuGuolin 阅读(701) 评论(0) 推荐(0)
摘要:程序执行需要内存支持对程序来说,内存就是程序的立足之地(程序是被放在内存中运行的);程序运行时需要内存来存储一下临时的变量。内存管理最终是由操作系统完成的内存本身在物理上是一个硬件器件,由硬件系统提供。内存是由操作系统统一管理。为了内存管理方便又合理,操作系统提供了多种机制来让我们应用程序使用内存。... 阅读全文
posted @ 2015-11-17 10:27 SuGuolin 阅读(249) 评论(0) 推荐(0)
摘要:typedef 定义(或者叫重命名)类型而不是变量1、类型是一个数据模板,变量是一个实在的数据。类型是不占内存的,而变量是占内存的。2、面向对象的语言中:类型的类class,变量就是对象。#include//结构体类型的定义// struct student// { // char name[20]... 阅读全文
posted @ 2015-11-16 11:27 SuGuolin 阅读(285) 评论(0) 推荐(0)
摘要:(1)指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。(2)数组指针的实质是一个指针,这个指针指向的是一个数组。C语言本身是强类型语言(每一个变量都有自己的变量类型),编译器可以帮我们做严格的类型检查。数组指针分析指针数组与数组指针的表达式(1) int *p[5]; int... 阅读全文
posted @ 2015-11-13 11:07 SuGuolin 阅读(149) 评论(0) 推荐(0)
摘要:1、指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。2、数组指针的实质是一个指针,这个指针指向的是一个数组。int *p[5]; int (*p)[5]; int *(p[5]);我们定义一个符号时,关键在于:首先要搞清楚你定义的符号是谁(第一步:核心);其次再来看谁跟核心最近、谁... 阅读全文
posted @ 2015-11-12 18:01 SuGuolin 阅读(158) 评论(0) 推荐(0)
摘要:#include #include char Char_arr[3][10]= {"Hell0","wWorld"};void main(){ printf("str1 = %s \n", &Char_arr[0][0]); printf("str2 = %s \n", &Char_... 阅读全文
posted @ 2015-11-06 16:54 SuGuolin 阅读(899) 评论(0) 推荐(0)
摘要:值为0 (NULL)的指针叫 空指针。int *p = 0;当指针为空时,不能使用“*”号操作int * p = 0;printf("%d\n",*p);程序执行出错。但空指针是程序员可以接受的一种情况,只需要加一个 if 判断就能解决! if ( p ) pintf("%d \n", *p );... 阅读全文
posted @ 2015-10-31 16:52 SuGuolin 阅读(1241) 评论(0) 推荐(0)