C语言小知识

一.宏定义:用的时候将要代替的数加(),提高严谨性。

#define SEC_PER_YEAR(365 * 24 * 60 * 60) UL

#define  AUO_CTR_SET_1(PA0 = 1)

二.枚举:实际是宏定义的一种优化(进化)。

举例:

#define SUN0

#define MON1

#define TUS2

可由下面枚举替代:

enum weak

{

SUN,

MON,

TUS,

};

三.结构体

1.定义结构体类型:

struct  Mystruct

{

    inf a;

    char b;

     float c;

};

2.定义结构体变量:

struct Mystruct s1;

s1 = {123,'s',1.0};

3.使用结构体变量:

s1.a =123;s1.b = 's';s1.c = 1.0;

4.结构体的对齐:

一般32位系统默认结构体变量成员是4字节对齐,这样访问速度最快。

则 struct Mystruct 类型占用内存:4+4+4

四:指针

数组指针:基本类型:int *p[5],本质是一个

五:内存

程序中变量在内存中主要分布在栈(static)、堆(heap)、数据段、bss段(ZI段)。

栈(static):系统自由分配,主要存储局部变量,使用完后立即释放,脏内存,使用时要初始化。

堆(heap):需要使用者自己申请。使用malloc()函数申请,使用完后用free()函数释放。

函数原型: void * malloc(申请字节数);

使用:int * p = malloc(1000*(sizeof(int)));申请1000个int型变量空间

访问:*(p + 1) = 23;

释放:free(p)

数据段:程序中显式初始化非零的全局变量和静态局部变量都分配在数据段。

bss段:也叫ZI 段zero initial,初始化为0或初始化时没有赋值的全局变量。

六:指针的应用

点阵显示字码数组:

uint8 code WeekMod[] = {  
    0xFF, 0x99, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xE7,  //星期日(红心)
    0xEF, 0xE7, 0xE3, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3,  //星期一
    0xC3, 0x81, 0x9D, 0x87, 0xC3, 0xF9, 0xC1, 0x81,  //星期二
    0xC3, 0x81, 0x9D, 0xC7, 0xC7, 0x9D, 0x81, 0xC3,  //星期三
    0xCF, 0xC7, 0xC3, 0xC9, 0xC9, 0x81, 0xCF, 0xCF,  //星期四
    0x81, 0xC1, 0xF9, 0xC3, 0x87, 0x9D, 0x81, 0xC3,  //星期五
    0xC3, 0x81, 0xF9, 0xC3, 0x81, 0x99, 0x81, 0xC3,  //星期六
    0xFF, 0x99, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xE7,  //星期日
};

void ShowLedArray(uint8 *ptr)

ShowLedArray(WeekMod + CurTime.week*8); //星期

分析:WeekMod为数组名代表数组首元素的首地址,WeekMod + 1

七:十六进制数转十进制数

比如:0x12转十进制的时候可直接把第四位移出0x12>>4 = 0x01得到十进制的1,0x12&0x0F得到十进制的2。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值