You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

32位系统中sizeof(int)*10与sizeof(40)的区别及代码等价性疑问

代码A与B的区别(32位系统环境)

这两段代码完全不同,核心差异在于sizeof运算符的作用对象:

代码A解析

int *numptr = malloc(sizeof(int)*10);

在32位系统中,int类型占4字节,sizeof(int)的计算结果为4。因此这行代码向堆内存申请了4*10=40字节的空间,足以存放10个int类型的数据。

代码B解析

int *numptr = malloc(sizeof(40));

这里的40是int类型的字面常量,sizeof(40)等价于sizeof(int),计算结果同样是4。这意味着代码B仅申请了4字节的内存,只能容纳1个int类型的数据。

关键提醒

  • 若想直接申请40字节内存,正确写法是malloc(40),而非sizeof(40)——sizeof的作用是计算类型或变量的字节占用量,不能直接用来表示数值对应的字节数。
  • 如果在代码B中尝试通过numptr访问超过4字节的内存(比如写入第2个int值),会触发内存越界,引发未定义行为(如程序崩溃、数据损坏等)。

内容的提问来源于stack exchange,提问作者Morty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:05:27