struct mydata
;
開始沒有理解紅色部分的內容,上網搜尋下,發現用處很大,記錄下來。
在結構中,data是乙個陣列名;但該陣列沒有元素;該陣列的真實位址緊隨結構體mydata之後,而這個位址就是結構體後面資料的位址(如果給這個結構體分配的內容大於這個結構體實際大小,後面多餘的部分就是這個data的內容);這種宣告方法可以巧妙的實現c語言裡的陣列擴充套件。
實際用時採取這樣:
struct mydata *p = (struct mydata *)malloc(sizeof(struct mydata )+strlen(str))
這樣就可以通過p->data 來操作這個str。
示例:
#include
using
namespace
std;
struct mydata
;int main()
輸出:
size of mydata: 4
mydata's data is: 123456789
由於陣列沒有元素,該陣列在該結構體中分配占用空間,所以 sizeof(struct mydata) = 4。
malloc申請的是14個位元組的連續空間,它返回乙個指標指向這14個位元組,強制轉換成struct info的時候,前面4個位元組被認為是mydata結構,後面的部分拷貝了「123456789」的內容。
在讀程式中經常會看到這樣的定義char data[0],這是乙個什麼樣的用法,有什麼好處,在哪些地方用到?
本文的主要目的就是闡明這個定義的作用,以及適用範圍,這需要對指標的概念和作業系統的記憶體模型有乙個情形的認識。
首先看一段程式:
#include
#include
#include
typedef
struct _info
info;
int main(int argc, char* argv)
程式的執行結果是:4。整數i就佔了4個位元組,這表明data沒有占用空間。data是乙個陣列名;該陣列沒有元素;該陣列的真實位址緊隨結構體info之後;這種宣告方法可以巧妙的實現c語言裡的陣列擴充套件。
記住上面的結構體不同於:
typedef
struct _info
info;
這個結構體占用8個位元組的空間,因為指標型別要占用4個位元組的空間。
再看乙個例子:
#include
#include
#include
typedef
struct _info
info;
int main(int argc, char* argv)
程式的執行結果見下圖:
可知,data的位址是緊隨結構體之後的。
在結構體中定義巨集定義意義
第一次看見在結構體中有巨集定義,開始有點迷糊,想到該結構是如何儲存的?巨集定義會是不會多次編譯?以下是我看的乙個列子 typedef struct define xcp authorized bit 0x01 uint16 t xcpauthorizedbit 1 define block resp...
typedef在結構體定義中的使用
物件導向的語言接觸得多了,經常會忘記c語言中結構體變數宣告的特殊性,在這裡總結回顧一下。一 結構體在 中的兩種常見定義形式 1 結構體型別定義 struct a 定義 中的結構體為乙個名稱是 a 的結構體。使用這種定義方式時,必須使用struct a 來宣告變數,a 的宣告形式在c語言中是不被支援的...
定義在結構體裡面的巨集
測試 如下 include struct test void func define st define 20 int main int argc,char ar 輸出 1 10 20總結 1 巨集定義在結構體裡面,只是方便 的閱讀,一般這種情況,大部分是結構體裡面有標誌量,方便閱讀。2 在結構體裡...