__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就是指针。