typedef結構體指標變數再去定義變數什麼意思

2021-07-08 21:32:22 字數 6347 閱讀 7023

1樓:匿名使用者

driverextension是一個你自己命名的結構體的名字(看起來是驅動拓展?),結構體裡的結構是自己定義的,不過這個結構體貌似是引用了另一個結構體。。。你說的pdriver_extension driverextension就是這樣定義結構體的,沒有問題

2樓:

typedef是自定義型別,相當於,用pdriver_extension代替了前面那一串東西,他是一個指標型別是資料,而且是一個結構體型別的指標資料型別,就像int型別一樣,只不過他是你自己定義的,而driverextension就是一個上面你定義的這種型別的資料,類似於int i,是一樣的

3樓:

typedef struct _driver_extension*pdriver_extension;

上面這樣做之後

pdriver_extension相當於是struct _driver_extension *

定義指標的時候直接寫pdriver_extension driverextension

相當於是struct _driver_extension * driverextension

所以driverextension是指標

4樓:匿名使用者

pdriver_extension 相當於struct _driver_extension * ,

pdriver_extension driverextension;等同於

struct _driver_extension * driverextension;

所以driverextension是一個指向struct _driver_extension 結構體的結構體指標變數。typedef 相當於宣告瞭一個新型別,用它就可以宣告新的變數。注意typedef 與define的區別,特別是指標方面。

*pdriver_extension driverextension這種應該沒有。

5樓:匿名使用者

首先,driverextension是結構體指標變數,由“pdriver_extension driverextension;”定義而來; 而*pdriver_extension driverextension這種定義應該是不對的,沒有這種定義。

6樓:北夜之殤

pdriver_extension 既不是變數也不是地址,它表示這個結構體的指標型別

而用pdriver_extension 定義的是可以指向這種結構體的指標,就是pdriver_extension 與 _driver_extension *等價,即

pdriver_extension driverextension等價為_driver_extension * driverextension

好好理解下就知道了,這其實不難的

7樓:匿名使用者

簡化之typedef struct st*pst;

pst a, b; 等於 struct st * a; struct st * b; b依然是結構指標!

還可以定義 pst * c; 等於struct st ** c;

但無 *pst c; 寫法

區別於#define pst struct st*pst a, b; 等於 struct st *a; struct st b; b是結構變數,不再是結構指標了!

結論:#define只進行簡單的替換,typedef則不然!

8樓:雲海鷹影

我也有疑問,這種型別的指標怎麼初始化呢?

driverextension = new *pdriver_extension; //這樣對嗎?

9樓:鷹弈

pdriver_extension driverextension;等價於

struct _pdriver_extension driverextension;

你會發現

pdriver_extension等價於struct _pdriver_extension

為什麼?注意前面的typedef的用法,這時的*pdriver_extension並不是結構體指標變數,而是一個結構體指標型別,driverextension才是結構體指標變數

他的定義遵循 《型別》 《變數》

typedef的用法,舉個簡單例子

typedef int aaa

相當於aaa = int,也就是說aaa為int 型別,int a;等價於aaa a;

aaa是int型別,a是int型別變數

那麼typedef的意思就是重新定義變數型別的名字

回答補充:

額。。。你還是沒理解,因為pdriver_extension是結構體《指標》型別,由他定義的變數為結構體《指標》變數,根結構體變數是兩個概念

那driverextension->driverobject=函式地址,這怎麼理解?

你沒給函式**,還有部分指標操作**,但根據你的表達方式可看出,此目標函式的型別為結構體函式指標

又因為指標只能操作地址,結構體成員driverobject儲存了目標函式的地址,相當於driverobject=函式地址,而結構體指標變數driverextension呼叫結構體成員driverobject,相當於driverextension->driverobject

也就是說driverextension呼叫了driverobject儲存了函式地址

這種用法,是在定義結構體變數時定義了一種指標變數嗎?

10樓:

不,不對,是在typedef的配合下為struct ctnode *起一個別名叫childptr。以後宣告結構體指標變數時,寫struct ctnode *p;和寫childptr p;就是同一個意內思了。容前面的ctnode也不是結構體變數,而是結構體struct ctnode的別名,以後就可以用ctnode宣告結構體變數了,省去了寫struct的麻煩……如果最前面沒有typedef,那ctnode就是struct ctnode型變數,childptr就是struct ctnode *型指標。

11樓:匿名使用者

當然啦,你還以為怎麼樣。。。

定義一個結構體指標變數

12樓:匿名使用者

1、結構體指標的定義:

struct node

a , *b;

2、結構體指標的使用:

b=&a;

a.p與(*b).p 與p->num是相同的意思。a.node與(*b).node與p->node是相同的意思。

a.addr與(*b).addr與p->addr是相同的意思。

3、注意事項:

(1)、結構體指標必須指向一個確定的結構體變數,如:p=&a;

(2)、通過結構體變數的指標訪問結構體的方法為:

a.num、(*p).num、p->num。

13樓:海陸

typedef struct link

14樓:匿名使用者

struct node;

15樓:匿名使用者

有三種格式去定義的,具體的你看下面的啊,下面的說得很清楚的

16樓:匿名使用者

struct node;

17樓:匿名使用者

struct node

node;

struct node *pt;

18樓:匿名使用者

struct node

node;

struct node *pt;

如何用typedef 定義一個 包括指向該結構體指標的結構體?

19樓:匿名使用者

要有結構體名和別名,一起都要有。

不然定義next會出錯。

一般寫成內

typedef struct lnodelnode;

這裡lnode和struct lnode是兩個不同的名字容,但含義相同。 前者是後者的別名。

c語言中,typedef定義一個結構指標型別,在使用這個型別定義變數,為什麼會初始化為0x0,指定為null不生效

20樓:匿名使用者

你也可以這樣寫typedef struct node{}node;node *linklist;typedef理解了嗎,不理解的話看下面的**,效果一樣struct node{};struct node *linklist;也就是說node相當於新定義的”節點“型別,用法就像整數型別int,字元型char。而linklist就是該型別的指標,儲存地址,使用的時候是linklist->data=,linklist->next=linklist(或者其他該型別的指標)。

結構體中在大括號外的變數和指標分別代表什麼?同時那個指標這麼用是什麼意思?

21樓:匿名使用者

typedef struct _bitnode//是否忘記打typedef?要不你底下的bitree t是不能通過編譯的!因為按你的寫法bitree是一個變數而不是一個變數型別,另外請去掉兩個圓括號,還有為防止衝突,前邊加下劃線

bitnode,*bitree;

意思是定義一個結構體型別(用作連結串列的一個節點),bitnode就是該結構體,而bitree是一個bitnode型別的指標。

bitree t是說引數t是一個指標,該指標是bitree型別的,根int * ,float* 一樣,就是一個指標而已。

22樓:好嘞啊啊啊啊

如果單單這樣寫

struct bitnode()

;是宣告一個結構體變數;

struct bitnode()

bitnode,*bitree;

//這樣寫的話相當於 宣告變數的同時 定義一個就夠變數,和定義一個結構體指標,也相當於

struct bitnode()

;struct bitnode bitnode;

struct bitnode * bitree;

t是指向結構體的指標

請問c++中定義一個結構體的指標變數與這樣定義有什麼區別,後者應該也是一個指標吧,謝謝(這個結構體

23樓:匿名使用者

str *p;

這樣定義

來只是宣告瞭

源一個str指標型別的變數, 如果不分配記憶體讓它指向的話, 是不可以用的.

str pp;

這個定義就說明了定義了pp這個變數, 已經分配了記憶體了, 這塊記憶體的名字就叫做pp, 而不是指標

這些都是c語言的基礎 , 希望能幫到你

c語言裡結構體的問題。結構體定義指標型別是怎麼回事?

24樓:小笑笑狗狗

您好,您的問題是不是有點略多,下面一一為您解答:

1、typedef char **huffmancode 實際上是typedef (char *) *huffmancode。寫成這種形式更好理解, **huffmancode是指向指標的指標,這裡也可以理解為是指向字串的指標,因為char*字元陣列相當於字串。

2、*huffmantree表示指向結構體htnode的指標,htnode是typedef語法指定的結構體的別名,然後*huffmantree是在定義結構體的同時定義了指向結構體的指標。

3、指標只是一個地址,huffmantree作為結構體指標同樣是一個地址,因此不存在它內部有4個變數一說。嚴格意義上講是huffmantree這個指標指向的結構體中有這4個變數,而這4個變數和在main函式裡定義的普通變數一樣,都佔用實際記憶體,在新建結構體的同時為這4個變數分配記憶體空間。

4、ht=(huffmantree)malloc((m+1)*sizeof(htnode))。這個是malloc的語法,該語句的含義是分配m+1個htnode結構體佔用的記憶體,將分配的記憶體地址賦給ht。sizeof作用是判斷某個型別所佔用的記憶體空間,此處是計算htnode佔用的空間大小,然後(m+1)*sizeof(htnode)表示m+1個htnode,malloc是請求分配記憶體,(huffmantree)是強制型別轉化,將得到的記憶體地址強制轉化為huffmantree(即htnode指標型別)。

5、malloc是c語言中常用的動態分配記憶體的語法,劃重點“動態”,當你需要動態申請記憶體時(例如給陣列擴容,還有此處的為結構體申請空間)時用到該語法,c語言中記憶體相關語法還有realloc,free可以自行了解一下。在c++中new和delete更為常用。

結構體巢狀多層結構體指標怎麼malloc

比較好的方式是巢狀呼叫,嗯,類似初始化函式.struct a get a struct b get b struct c get c 差不多就這樣,當然你也可以,巢狀的結構也是成員變數啊。成員變數是指標就先malloc成員變數就行了。這和我們寫結構連結串列的 next指標是一個道理啊。程式中有一個結...

c語言結構指標和結構體成員指標問題

既是取地址符號,一個指標p指向q就需要寫作p q,在函式引數裡是 引用 就是別名,類似指標了,這種情況下對變數的修改會影響到函式外的原變數。那個printf a p n a 等於求出地址 x然後作為指標看待 p 所以也是yyyy了 樓主可以做個試驗,看看輸出結果地址間的關係,你就應該可以理解了 in...

keil中結構體變數能定義位變數嗎怎麼定義

位結構是c51語言中的一種特殊結構,可以用於訪問一個位元組或字的多個位。位結構一般形式如下。struct 位結構名 位結構變數 其中,struct為關鍵字,位結構資料型別必須是整型int unsigned或signed 整形常熟必須是非負的整數,範圍是0 15,用於表示有多少位,即表示二進位制位的個...