C语言中都有哪些鲜为人知的奇技淫巧?

2026-05-08 13:242阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1978个文字,预计阅读时间需要8分钟。

C语言中都有哪些鲜为人知的奇技淫巧?

一、变长数组,严谨来说,在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语言中都有哪些鲜为人知的奇技淫巧?

一、变长数组,严谨来说,在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没有被分配空间。

阅读全文