如果我错了,请纠正我
malloc(1) // Mallocing 1 which is a int
等于
malloc( sizeof(1) )
答案 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}}然后使用long
或long 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的大小一样多的字节。