![](/img/trans.png)
[英]What's the difference between char[] & char* when declare inside 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.