当我在C++中动态分配数组时,我使用以下内容:

char* arr = new char[length];

因此,当我开始学习C语言时,我自然会使用以下内容来分配我的字符串:

char* arr = malloc(sizeof(char[length]));

然而,我认为常见的做法是使用以下内容:

char* arr = malloc(length * sizeof(char));

上面的陈述是等价的吗,还是有什么理由我不应该使用sizeof(char[length])

推荐答案

这两者实际上是一样的.

sizeof(char[length])的计算结果为长度为lengthchar数组的字节大小.这与length * sizeof(char)的值相同.

虽然后者更常见,但前者也很好.唯一需要注意的是,一些编译器,例如MSVC,不支持可变长度数组,在这种情况下,sizeof(char[length])将是无效的.

C++相关问答推荐

char为16位且Short也为16位的c环境合法吗

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

C在声明带有值的数组时,声明大小有用吗?

是什么让numpy.sum比优化的(自动矢量化的)C循环更快?

CGO:如何防止在使用CGO在包中包含C头文件时出现多个定义...&q;错误?

如何计算打印二叉搜索树时每行所需的空间?

预处理器宏扩展(ISO/IEC 9899:1999(E)§;6.10.3.5示例3)

试图创建一个基本的Word克隆,但遇到了障碍

搜索使用int代替time_t的用法

为什么这个分配做得不好呢?

Zlib:解压缩大文件导致";无效代码长度设置";错误

OSDev--双缓冲重启系统

CS50 pset 5的皱眉脸正确地处理了大多数基本单词,并且拼写判断不区分大小写.

从另一个宏函数调用C宏

挥发性语义的形式化理解

使用 strtok 多次分割一个字符串会导致意外行为

GDB 用内容初始化数组

为什么实现文件中的自由函数默认没有内部链接?

为什么需要struct in_addr