align 雙重指標 結構體指標

2021-09-02 17:24:33 字數 1686 閱讀 3026

__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

來自 如果例子想達到目的,該怎麼改呢? 我們可以使用雙重指標實現。所謂雙重指標,也稱為二維指標,宣告形式

型別名 **指標名, eg: char **p, 含義是指向指標的指標。

如下圖:

1)首先申請了乙個空間,我們假設位址為a,a位址內容是p,p是乙個二級指標,指向以p為位址的空間,則其內容為p。

2)p時乙個一級指標,指向以p為位址的空間,該空間儲存的是」123」

3)引用二級指標,修改p 的值就可以改變二級指標(**p)所指向的位址。通過函式引數形式修改指標位址,一般使用二級指標。

eg:char **p =」123」 , *a = 「456」; *p = a; 這時候,**p指向的內容是「456

來自 這是原來寫**遇到的指標bug,現在看也不太對,當時寫的備註好像有點問題,時間久了忘了,暫時放在這裡吧,萬一以後能想起來當時遇到的什麼bug呢

typedef struct  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就是指標。

結構體指標中包含結構體指標

將c 轉化為c的過程中,一些c 的特性無法使用 類內私有變數在類內公共函式中使用,轉化為c的時候選擇用malloc的方式,申請一段記憶體空間去儲存它,在函式中傳指標形參去操作這些變數。這時候遇到乙個問題,結構體中包含了另乙個結構體的指標,這導致了我malloc的時候,另乙個結構體中的記憶體空間沒有申...

陣列指標 結構體指標

指向指標結構體 include include int main struct student stu 1 定義struct student型別的變數stu1 struct student p 定義指向struct student型別資料的指標變數p p stu 1 p指向stu1 stu 1.nu...

結構體指標

定義結構體 typedef struct str stu t 建立結構體指標,存放某乙個結構體變數的首位址 stu t p2stu null 重新命名結構體指標名 typedef將使得原來申明的結構體變數成為資料型別 typedef stu t p2stu t 建立結構體指標,存放某乙個結構體變數的...