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

C语言中malloc()函数返回的指针是否为常量指针?

malloc()函数返回的指针是否为常量指针?

结论很明确:malloc()返回的不是常量指针,它是一个可修改的普通指针。

核心区别对比

  • 数组名作为常量指针,代表数组首元素的固定地址,永远无法通过赋值改变它的指向。比如下面的代码会直接编译报错:
    int arr[5];
    arr = malloc(5 * sizeof(int)); // 非法:数组名是常量指针,不能修改指向
    
  • 而malloc返回的指针(通常转换为具体类型的指针变量),其指向完全可以被修改。比如:
    int* p = (int*)malloc(5 * sizeof(int));
    if (p != NULL) {
        int x = 100;
        p = &x; // 合法:修改p的指向,让它指向变量x
        p = realloc(p, 10 * sizeof(int)); // 合法:让p指向realloc重新分配的内存
    }
    

本质原因

malloc的返回值是void*类型的指针,当你把它赋值给一个指针变量时,这个变量就是普通的左值(可被赋值的对象);而数组名属于“不可修改的左值”,它的指向在编译期就被固定,无法在运行时改变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:45:36