我正在做一些C编码,在阅读了一些C代码后,我注意到有类似的代码片段
char *foo = (char *)malloc(sizeof(char) * someDynamicAmount);
所以我想问一下C-ish为char数组分配内存的方法是什么?sizeof(char)对任何标准更改使用并假设未来的代码更改或省略它并直接使用数字?
APr*_*mer 65
Cish的方式就越多
char* foo = malloc(someDynamicAmount * sizeof *foo);
引用变量而不是类型,以便不需要类型.并且没有强制转换malloc的结果(这是C++ ish).
Red*_*edX 29
我sizeof(char)愿意明确意图.如果有人决定他想让foo成为一个int他知道他需要做sizeof(int)的就是继续工作.
或省略并使用该号码
另外,使用幻数不是很好的编码习惯.
Arm*_*yan 11
相比:
float*baz = malloc(sizeof(float) * someDynamicAmount);
int  *bar = malloc(sizeof(int)   * someDynamicAmount);
char *foo = malloc(sizeof(char)  * someDynamicAmount);
VS:
float*baz = malloc(sizeof(float) * someDynamicAmount);
int  *bar = malloc(sizeof(int)   * someDynamicAmount);
char *foo = malloc(someDynamicAmount);
我喜欢第一个版本.你喜欢第二个吗?
按照标准,你是正确的,乘法是不可靠的.也就是说,这看起来像是一个人变得一致的习惯.如果你总是使用sizeof(),不管类型,你永远不会忘记.
char *foo = (char *)malloc(sizeof(char) * someDynamicAmount);
int  *bar = (int  *)malloc(sizeof(int)  * someDynamicAmount);
常见的习语是
T *p = malloc(N * sizeof *p);
要么
T *p;
...
p = malloc(N * sizeof *p);
这样您就不必担心类型了.
| 归档时间: | 
 | 
| 查看次数: | 4306 次 | 
| 最近记录: |