__align、双重指针、结构体指针

__align

__align 关键字指示编译器在 n 字节边界上对齐变量。
__align 是一个存储类修饰符。它不影响函数的类型。
语法
__align(n)
其中:
n
是对齐边界。
对于局部变量,n 值可为 1、2、4 或 8。
对于全局变量,n 可以具有最大为 2 的 0x80000000 次幂的任何值。
__align 关键字紧靠变量名称前面放置。
用法
如果声明的变量的常规对齐边界小于 n,__align(n) 是非常有用的。八字节对齐方式可以显著提高 VFP 指令的性能。
可以将 __align 与 extern 和 static 一起使用。
限制
由于 __align 是存储类修饰符,因此不能将其用于:
• 类型,包括 typedef 和结构定义
• 函数参数。
只能进行过对齐。也就是说,可以将两个字节的对象按 4 个字节对齐,而不能将 4 个字节的对象按两个字节对齐。
示例
__align(8) char buffer[128]; // buffer starts on eight-byte boundary
来自 http://www.cnblogs.com/xidongs/p/5655440.html

双重指针

如果例子想达到目的,该怎么改呢? 我们可以使用双重指针实现。所谓双重指针,也称为二维指针,声明形式
类型名 **指针名, eg: char **p, 含义是指向指针的指针。

如下图:
在这里插入图片描述
char **p = “123”:
1)首先申请了一个空间,我们假设地址为a,a地址内容是p,p是一个二级指针,指向以p为地址的空间,则其内容为p。
2)p时一个一级指针,指向以p为地址的空间,该空间存储的是”123”
3)引用二级指针,修改
p 的值就可以改变二级指针(**p)所指向的地址。通过函数参数形式修改指针地址,一般使用二级指针。
eg:

char **p =”123” , *a = “456”; *p = a; 这时候,**p指向的内容是“456
来自 http://blog.csdn.net/gdjason/article/details/51123978

结构体指针

这是原来写代码遇到的指针BUG,现在看也不太对,当时写的备注好像有点问题,时间久了忘了,暂时放在这里吧,万一以后能想起来当时遇到的什么bug呢

typedef struct {
    OS_EVENT*   pQ;    
    void*       pvQEntries[MAX_QUEUE_ENTRIES];
} TQ_DESCR, *PQ_DESCR;


typedef OS_EVENT *sys_sem_t;   
typedef OS_EVENT *sys_mutex_t; 
typedef PQ_DESCR sys_mbox_t;    
typedef INT8U sys_thread_t;     

分析:
int *p ;   指向一个整型的指针。
如果,在前面我们使用了   typedef int * Pint;
则上面的声明方法,可以改为: Pint p;同样是声明一个指向整型的指针。

上面定义了一个结构体 和一个指向结构体的指针,
下面的前两个分别是 定义了指向OS_EVENT的三个指针类型,
然后可以使用sys_sem_t *sem定义指针,其中
*sem是指针
而第三个其实也一样  

最好最简单还是怎么用
typedef OS_SEM  sys_sem_t;  
然后sys_sem_t *sem 

其中sem就是指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值