C老鸟编程技巧总结 (2)

 

本文来自http://blog.csdn.net/lijun84 ,引用必须注明出处!

 

5 ,复杂指针的声明


 

规则总结:

1) 去掉变量名就类型 , 去掉一个 *, 就是指向内存单元的类型 .

2) 强调什么将名子和强调的东东括最里层 , 再将其次强调的东西括外面一层 , 最后强调的括最外层 , 类型最后加在外面 :

: int (*i)[2]; 指向 int ()[2] 的指针 ( 强调指针 )

       Int *(i[2]); 类型为 int *() 的数组 ( 强调数组 )

       Void (*pf)(); 指向 void ()() 的函数指针 .

Void (*(pf[2]))();  函数类型为 void ()() 的指针数组 ( 最强调数组 , 所以先括数组 , 其次强调指针 , 所以将它括在外面一层 .

Void (*((*pf)[2]))(); 指向上个函数指针数组的指针 ,( 最强调指针 , 所以将变量明和指针括在最里层 , 其次强调数组 , 所以括在上一层 , 最后又强调指针 , 所以将其括在最外层 .)

 

 

 

 

6. 模拟 UCOS 中的 TASK 切换和邮箱机制 (由于 UCOS 代码比较复杂,自己实现了个模拟的,为了方便所以栈还是弄乱了!)

#define T(a,b) t##a(){ /

              while(1){ /

                     printf(gM(a)); /

                     sM(#b"/n",b); /

                     mS(); /

              } /

       }

 

unsigned int ip=0;

char mb[2][3];

 

char*gM(int p){

       return (mb[p-1]);

}

 

sM(char*m,int p){

       strcpy(mb[p-1],m);

}

 

mS(){

       Sleep(0xFF);

       _asm mov eax,ip

       _asm xchg eax,[ebp+4]

       _asm mov ip,eax

}

 

T(1,2)

T(2,1)

 

main(){

       ip=&t2;

       t1();

}

 

 

7, 泛型宏 (说明代码提取自 Linux 源码)

#define min(x, y) ({                           /

       typeof(x) _min1 = (x);                 /

       typeof(y) _min2 = (y);                 /

       (void) (&_min1 == &_min2);             /

       _min1 < _min2 ? _min1 : _min2; })

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值