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

调用malloc为指针赋值后,指针自身的地址是否会发生变化?

C语言malloc指针赋值问题解答

示例代码如下:

int *p;
p = (int*) malloc(n*sizeof(int));

问题1:赋值后指针p自身的地址会发生变化吗?

  • 不会。指针p本质上是一个存储「内存地址值」的普通变量,它本身的内存地址在你定义int *p;的时候就已经固定(函数内的局部变量分配在栈空间,全局变量分配在静态区),本次赋值只会修改p变量内部存储的地址值,不会改变p变量本身在内存中的存储位置。

问题2:赋值后p指向的是不是malloc分配的对应大小的新内存地址?

  • 是的。只要malloc执行成功没有返回NULL,p中存储的就是这次malloc在堆空间申请的、大小为n*sizeof(int)的连续内存块的首地址。如果malloc申请内存失败会返回NULL,此时p不会指向有效内存,因此实际开发中建议对malloc的返回值做非空判断,避免空指针访问异常。

问题3:这段代码的实际作用(通俗解释)

你可以把内存想象成一个带唯一编号的巨型储物柜集群:

  1. int *p;相当于你先准备了一个专用便签,这个便签只能用来记录能存储int类型数据的储物柜编号,初始状态便签是空的。
  2. malloc(n*sizeof(int))相当于你向储物柜管理方申请n个连续的、每个容量刚好能放下一个int类型数据的储物柜,申请成功管理方会返回这组储物柜第一个柜子的编号,申请失败就返回无效的空编号。
  3. (int*)是类型转换,作用是把管理方返回的通用编号,转换成你这个专用便签支持的int类型储物柜编号格式。
  4. 赋值操作p = ...就是把申请到的首个储物柜编号写在p便签上,后续你要读写这n个储物柜的内容,直接通过p上记录的编号定位即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:04