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,用於表示有多少位,即表示二進位制位的個...