簡體   English   中英

char []和char *在struct中有什么區別?

[英]What's the difference between char [] and char * in struct?

有一個這樣的結構:

struct sdshdr {
    int len;
    int free;
    char buf[];
};

printf ("%d\\n", sizeof(struct sdshdr));的結果printf ("%d\\n", sizeof(struct sdshdr)); 是8.如果我改變char buf[]char * ,其結果將是16.為什么char buf[]以沒有空間在這里( sizeof(int)是4)?我什么時候768,16選擇char buf[]char *buf

帶有空方括號[]結構允許作為struct的最后一個元素。 它使您可以為數組的元素分配超出sizeof(sdshdr)額外空間,從而使數組數據與數組本身一起嵌入。

另一方面,指針將數據存儲在單獨管理的內存段中,並且需要額外的調用才能在最后free []方式不同,指針使您可以在同一struct擁有一個以上的可變長度數組,並且該元素可以放置在struct任何位置,而不僅是在struct的末尾。

更普遍地采用“ char[] ”:

char[]實際上會在結構中分配許多字符。 (具有char x[17]將增加17個字節,依此類推。) char*將僅保留一個指針。

結構末尾的實際char x[] (未指定大小-我認為大小0也是一樣)是一種特殊情況,稱為“彈性數組成員”,將在鏈接的問題和其他問題中進行討論回答。

還要記住, sizeof需要在編譯時確定。 由於char buf[]是一個靈活的數組成員,因此在編譯時無法知道其大小,因此將在sizeof的計算中將其省略。

char *是一個指向char變量的指針,並且它的大小是已知的,因此包含在內(但是這是指針的大小而不是它指向的數組)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM