对工作中使用到的C语言语法进行整理,部分内容来自参考博文。
后期不断更新和丰富内容吧。
1 语法 1.1 结构体->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”
struct Data
{
int a,b,c;
};
struct Data * p;
struct Data A = {1,2,3};
int x;
p = &A ;
x = p->a;
对于一开始的问题 p = p->next;这应该出现在C语言的链表,这里的next应该是一个与p同类型的结构体指针,其定义格式应该是:
struct Data
{
int a;
struct Data * next;
};
…………
main()
{
struct Data * p;
……
p = p->next;
}
1.2 寄存器bit操作
将多位宽的寄存器GPIOx_CRL某一bit (第n bit , n 从0起始)置1,采取方法:
GPIOx_CRL = GPIOx_CRL | (0x01 << n) //n从0开始 GPIOx_CRL = GPIOx_CRL | (0x01 << 0) //将GPIOx_CRL[0]置1 GPIOx_CRL = GPIOx_CRL | (0x01 << 3) //将GPIOx_CRL[3]置1
将多位宽的寄存器某一bit (第n bit , n 从0起始)置0,采取方法:
GPIOx_CRL = GPIOx_CRL & (~(1 << n)) //解析,若GPIOx_CRL = 1001 1111,n=2, (1<<2) 得二进制数:0000 0100 取反是:1111 1011 GPIOx_CRL = (1001 1111) & (1111 1011) = 1001 1011
例如,需要设置第0位bit=1时,不能简单的设置为:GPIOx_CRL=0x01 ,这样的方法会使得低配置寄存器GPIOx_CRL的其它比特位都置为0。
对于二进制位操作来说:
不管该位原来的值是0还是1,它跟0进行&运算,得到的结果都是0,而跟1进行&运算,将保持原来的值不变;
不管该位原来的值是0还是1,它跟1进行|运算,得到的结果都是1,而跟0进行|运算,将保持原来的值不变。
参考
| 1、作者 | 博文 |
| 【转】C语言中 -> 是什么意思? | |
| C语言位操作 - bit 、byte的清零,置1,提取,判断 |



