C语言技巧之长度为0的数组
? ? ?在gnu c中有一種用法,就是可以使用長(zhǎng)度為0的數(shù)組,比如說(shuō)一下這個(gè)結(jié)構(gòu)體:
struct sample {
int length;
char store[0];
}
可以像以下這種方式來(lái)使用:
struct sample * example = (struct sample *)malloc(sizeof(struct sample)+size);
example->length = size;
example->store = example + sizeof(struct sample);
?
這個(gè)方法的優(yōu)勢(shì)主要在于你可以在結(jié)構(gòu)體中分配不定長(zhǎng)的大小,當(dāng)然有些人肯定會(huì)說(shuō),在結(jié)構(gòu)體中不適用這種奇葩的數(shù)組,而使用指針不是一樣的么?我們可以比較一下:
?
假設(shè)結(jié)構(gòu)體的定義為
struct sample {
int length;
char * store;
}
則使用方式變成
struct sample * example = (struct sample *)malloc(sizeof(struct sample));
example->length = size;
example->store =(char *)malloc(size);
?
而釋放內(nèi)存時(shí),使用長(zhǎng)度0的數(shù)組釋放是:
free(example);
而指針?lè)绞絼t
free(example->store);
free(example);
?
從上面的比較可以看書(shū),使用長(zhǎng)度為0的數(shù)組可以達(dá)到更簡(jiǎn)單的效果,同時(shí)節(jié)省了空間,因?yàn)槭褂瞄L(zhǎng)度為0的數(shù)組對(duì)應(yīng)的結(jié)構(gòu)體的長(zhǎng)度為4(0數(shù)組不占空間),而指針的結(jié)構(gòu)體對(duì)應(yīng)的長(zhǎng)度為8。
轉(zhuǎn)載于:https://blog.51cto.com/liangqiu/1175742
總結(jié)
以上是生活随笔為你收集整理的C语言技巧之长度为0的数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Vim案例两则
- 下一篇: 函数式编程学习之路(一)
