C (1)的大小是多少,它与1有什么不同?

C (1)的大小是多少,它与1有什么不同?,c,malloc,C,Malloc,如果我错了,请纠正我,但我错了 malloc(1) // Mallocing 1 which is a int 相等的 void*malloc(size\u t)返回一个指针,指针后的内存大小等于馈入malloc的参数。在您的例子中,malloc(1)只分配一个字节,而malloc(sizeof(int))分配2或4个字节 malloc(sizeof(1))和malloc(sizeof(int))是等价的语句,但后者更明显。因此malloc(1)并不等同于malloc(sizeof(1))as

如果我错了,请纠正我,但我错了

malloc(1) // Mallocing 1 which is a int
相等的

void*malloc(size\u t)
返回一个指针,指针后的内存大小等于馈入
malloc
的参数。在您的例子中,
malloc(1)
只分配一个字节,而
malloc(sizeof(int))
分配2或4个字节


malloc(sizeof(1))
malloc(sizeof(int))
是等价的语句,但后者更明显。因此
malloc(1)
并不等同于
malloc(sizeof(1))
as
sizeof(1)==4
。(有时是2,8)

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

但是,
malloc(sizeof(1))==malloc(sizeof(int))
将不为真,因为您分配了两个不同的内存区域,每个调用将返回不同的指针。这些内存区域的大小将是相同的,但不是由
malloc
返回的指针。如果两个
malloc
调用都失败并返回
NULL
,则会出现异常

我知道你可能不是指比较
malloc
调用的字面意思,但是在编程中,这些东西是很重要的。语义学非常重要

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

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


例如,您可能希望阅读其中的内容,其中说明参数是要分配的字节数。

整型常量,如
1
与变量一样,都有自己的类型。在这种情况下,
int

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


因此
malloc(1)
意味着“分配1个字节”,而
malloc(sizeof(1))
意味着分配一个整数大小的字节。

我不认为OP意味着
=
在64位体系结构中,当编译64位时,这行代码:
malloc(sizeof(int))
将返回一个指向8个字节的指针,位于“堆”中。例如,
malloc()
始终返回指针,如果操作失败,则返回NULL。指针的类型是:
void*
,分配内存的实际长度将取决于基础架构。@user3629249查找
sizeof(int)==8
为真的系统比查找
sizeof(int)==2
为真的系统更难。所有现代家用PC系统,64位或32位,都有
sizeof(int)==4
。所以malloc(1)分配1个字节,这是否也意味着malloc(2)分配2个字节,依此类推???@Pyrons是的。它可能会分配更多,但是
n
字节是保证
malloc(n)
的。我想指出,这个问题的标题和正文是不同的。标题中的问题与正文中的文本相关吗?请不要把这样的问题分开,把整个问题放在正文中。好吧,我把整个问题重新表述了一遍,你为什么不自己看呢<代码>printf(“%d%d\n”,1,int(sizeof(1))malloc(1)分配1个字节?@Pyrons事实上,它分配的字节更多,但您不能将其视为分配了更多字节,因为这会破坏C规范设置的规则。如果分配一个字节,则应将返回的指针视为指向一个字节的指针。整数文本
1
当然属于
int
类型,但并非所有未加前缀的整数文本都属于
int
类型。它取决于所表示的值和表示数字的基数。(C2011 6.4.4.1/5-6)1)“除非另有后缀,否则所有整数文本的类型均为int”-->取决于值
0x7FFFFFFFFFFFFFFF
可能是类型
long long
。2) 详细信息:没有整数文本,但整数常量某些当前系统使用8字节
int
malloc( sizeof(1) )