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報文 而有的型別的包能用於主機的同時也使用於埠,比如...