sizeof(1)是多少,与1不同?

时间:2016-05-11 02:21:39

标签: c malloc

如果我错了,请纠正我

malloc(1) // Mallocing 1 which is a int

等于

malloc( sizeof(1) )

3 个答案:

答案 0 :(得分:4)

void* malloc(size_t)返回一个指针,指针后面的内存大小等于送入malloc的参数。在您的情况下,malloc(1)只分配一个字节,而malloc(sizeof(int))分配2或4个字节。

malloc(sizeof(1))malloc(sizeof(int))是等同的陈述,但后者更明显。因此malloc(1)malloc(sizeof(1))不等同于sizeof(1) == 4。 (或者有时候是2,8)

答案 1 :(得分:3)

整数常量的大小取决于常量的值和可能的后缀。如果整数int适合int,如果常数的值较大且不适合{int,整数常量至少 1}}然后使用longlong long。常量1小到足以容纳int,因此sizeof(1) == sizeof(int)为真。

但是,malloc( sizeof(1) ) == malloc( sizeof(int) )为真,因为您分配了两个不同的内存区域,每个调用将返回不同的指针。这些内存区域的大小将是相同的,但不是malloc返回的指针。例外情况是两个malloc调用都失败并返回NULL

我知道你可能并不意味着字面上对malloc电话的比较,但在编程中这些事情很重要。语义学非常重要。

至于标题中的问题,malloc(1)会返回指向一个单字节的指针。

假设大小也要小心,因为sizeof(int)实际上可能是四个字节。在小型嵌入式平台(或非常旧的系统)上,它可能是两个字节。在未来的系统上,它可能是8甚至更多。

您可能需要阅读,例如this malloc reference表示参数是要分配的 字节 的数量。

答案 2 :(得分:0)

整数常量(如1)就像变量一样有自己的类型。在这种情况下int

意味着sizeof(1)等同于sizeof(int)

因此malloc(1)表示“分配1个字节”,而malloc(sizeof(1))表示分配与int的大小一样多的字节。