char data 0 用法總結

2021-07-25 16:28:55 字數 1378 閱讀 2497

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的位址是緊隨結構體之後的。

在結構體中定義char data 0 的用法

struct mydata 開始沒有理解紅色部分的內容,上網搜尋下,發現用處很大,記錄下來。在結構中,data是乙個陣列名 但該陣列沒有元素 該陣列的真實位址緊隨結構體mydata之後,而這個位址就是結構體後面資料的位址 如果給這個結構體分配的內容大於這個結構體實際大小,後面多餘的部分就是這個dat...

char data 0 在struct末尾的用法

在結構中,data是乙個陣列名 但該陣列沒有元素 該陣列的真實位址緊隨結構體mydata之後,而這個位址就是結構體後面資料的位址 如果給這個結構體分配的內容大於這個結構體實際大小,後面多餘的部分就是這個data的內容 這種宣告方法可以巧妙的實現c語言裡的陣列擴充套件。實際用時採取這樣 struct ...

nmap 0基本用法

主機,埠,服務,系統 針對埠,比如 nmap 192.168.10.12 nmap scan type s options 掃瞄型別的意思是不是區別主機發現還是埠掃瞄 而是傳送什麼型別的包去探測 有的型別的包只能用於主機探測比如 sp傳送的icmp報文 而有的型別的包能用於主機的同時也使用於埠,比如...