1. 数据交换

不借助第三方变量实现对两个数字的交换。

void swap( int *a,int *b )
{
*a ^= *b ^= *a ^= *b;// 两两取反
}

 

2.char[0]

内核中,常见char[0]结构体字段的声明。

struct MyData 
{
int nLen;
char data[0];// 不占空间
};

 

sizeof(MyData) = 4;

变长数组,可申请一块连续空间,防止内存碎片,嵌入式开发中比较常见。

 

运用:

struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData) + strlen(str))

可通过 p->data 来操作这个str。

 

 3. 死循环



for ( char i=0; i<=0x7F; i++ ){ }



 经常会习惯性写出上述代码,上述代码会形成死循环。

 罪魁祸首就是i=0x7f这句,i=0x7f时,执行完循环后i=-128,条件为真,循环继续进行。

 i值从 0 - 127, -128 - 0, 0 - 127 周而复始变化。

 



// 方法一:取消i=0x7f临界条件 for( char i=0; i<0x7f; i++){ } // 方法二:声明为无符号数,推荐 for( unsigned char i=0; i<=0x7f; i++ ){ }