[討論] typedef的問題請教(已解決)

看板C_and_CPP作者 (懂得放手..才是王道)時間8年前 (2016/06/18 20:07), 8年前編輯推噓4(4010)
留言14則, 8人參與, 最新討論串1/1
最近看到一個typedef struct敍述看不太懂, 在此跟大家請教一下.. 以下是在Keil C環境所寫的code.. //Struct的定義 typedef struct _GPIO { ... }GPIO_REG, *P_GPIO_REG; //Struct變數的宣告 GPIO_REG gpio_reg _at_ GPIO_BASE_ADDR; 以上, 我不太懂的地方是 "*P_GPIO_REG"這個部份, 這是做什麼用的呢? 要如何使用呢? 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.176.161 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1466251638.A.1C1.html ※ 編輯: MaxHaru (36.226.176.161), 06/18/2016 20:20:37

06/18 20:36, , 1F
讀 typedef 宣告法: 把 typedef 遮起來看
06/18 20:36, 1F

06/18 20:37, , 2F
這裡它變成了 struct ... GPIO_REG, *P_GPIO_REG;
06/18 20:37, 2F

06/18 20:38, , 3F
即是宣告前者為此 struct, 後者為指向此 struct 形態的指標
06/18 20:38, 3F

06/18 20:38, , 4F
那麼這就是定義前者此名為這 struct 型態
06/18 20:38, 4F

06/18 20:38, , 5F
後者此名為指向此形態的指標
06/18 20:38, 5F

06/18 20:39, , 6F
指標型態
06/18 20:39, 6F

06/18 20:57, , 7F
GPIO_REG 新名稱 *P_GPIO_REG 指向此型態的指標
06/18 20:57, 7F

06/18 21:18, , 8F
其實我覺得可以寫GPIO_REG *就沒必要多一個P_GPIO_REG
06/18 21:18, 8F

06/18 21:18, , 9F
會出現這種寫法的人應該也有寫過WinAPI XD
06/18 21:18, 9F

06/18 22:37, , 10F
每次問到這個都要請LPH大神出來解答一下 XD
06/18 22:37, 10F

06/18 22:56, , 11F
這篇被m了, 是我做錯什麼了嗎??
06/18 22:56, 11F

06/18 23:39, , 12F
沒,你的問題很好,所以被 m 了。
06/18 23:39, 12F
================================================== 謝謝各位的說明, 我說明一下我的理解, 看看對不對.. 這樣的typedef struct定義了兩個東西, 1. GPIO_REG: 即該struct 使用方法: GPIO_REG gpio_reg; //宣告一個這種struct的變數gpio_reg 2. P_GPIO_REG: 可以用來指定這種struct的pointer 使用方法: P_GPIO_REG p_gpio_reg = &gpio_reg; /* // 宣告一個可以用來指到該struct的point變數p_gpio_reg, // 並將其指到gpio_reg; // 效果等同於GPIO_REG*p_gpio_reg = &gpio_reg; */ ※ 編輯: MaxHaru (36.226.176.161), 06/19/2016 00:21:51

06/19 03:37, , 13F

06/22 17:22, , 14F
了解
06/22 17:22, 14F
文章代碼(AID): #1NPJbs71 (C_and_CPP)