C语言中都有哪些鲜为人知的奇技淫巧?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1978个文字,预计阅读时间需要8分钟。
一、变长数组,严谨来说,在C++中实现并不是一件麻烦的事情。Stl中的vector本质上就是一个变长数组,并且有自动管理内存的能力。然而,在C中,实现变长数组就显得有些繁琐。
一. 变长数组
严格说来,变长数组的实现在c++中并不是一件麻烦的事情。Stl中的vector本身就是一个变长数组,并且有自动管理内存的能力。
但是在c中,实现变长数组就稍显麻烦。用C实现,必然需要一个结构,结构当中应当有一个指针,指针分配一段内存空间,空间大小根据需要而定,而且必须有另外一个字段记录究竟开辟了多大多长的空间。
大致描述如下:
Struct MutableLenArray { Int count; Char* p; };
P = new Char[Count];
没什么问题,但是C语言的使用者有个最大的自豪就在于对于效率、空间使用的掌控。他们会有这样的疑问,如果count=0,那么p就没必要了,白白占了4(64位系统为8)个字节的空间,简直浪费。
那有没有更好的方式能实现上面的需求,又保证空间合理呢?答案是有的,用0长度
Struct MutableLenArray { Int count; Char p[0]; };
和上面的结构使用方法一致,但是我们可以用sizeof尝试读取其大小,发现竟然只有count字段的长度4字节,p没有被分配空间。
本文共计1978个文字,预计阅读时间需要8分钟。
一、变长数组,严谨来说,在C++中实现并不是一件麻烦的事情。Stl中的vector本质上就是一个变长数组,并且有自动管理内存的能力。然而,在C中,实现变长数组就显得有些繁琐。
一. 变长数组
严格说来,变长数组的实现在c++中并不是一件麻烦的事情。Stl中的vector本身就是一个变长数组,并且有自动管理内存的能力。
但是在c中,实现变长数组就稍显麻烦。用C实现,必然需要一个结构,结构当中应当有一个指针,指针分配一段内存空间,空间大小根据需要而定,而且必须有另外一个字段记录究竟开辟了多大多长的空间。
大致描述如下:
Struct MutableLenArray { Int count; Char* p; };
P = new Char[Count];
没什么问题,但是C语言的使用者有个最大的自豪就在于对于效率、空间使用的掌控。他们会有这样的疑问,如果count=0,那么p就没必要了,白白占了4(64位系统为8)个字节的空间,简直浪费。
那有没有更好的方式能实现上面的需求,又保证空间合理呢?答案是有的,用0长度
Struct MutableLenArray { Int count; Char p[0]; };
和上面的结构使用方法一致,但是我们可以用sizeof尝试读取其大小,发现竟然只有count字段的长度4字节,p没有被分配空间。

