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

关于将malloc(sizeof(int*))赋值给int*指针的内存使用疑问

代码分析与问题解答

待分析代码

#include<stdio.h>
#include<stdlib.h>
int main() {
    int *n = malloc(sizeof(int*));//line 1
    scanf("%d",n);
    printf("%d",*n);
}

用户问题

  1. 代码第1行中的指针n是否仅为int类型指针?
  2. 我们是否直接将为指针分配的内存当作普通变量使用?
  3. 这里是否存在将指向指针的指针转换为指向int的指针的操作?

问题解答

  • 关于指针n的类型:
    是的,n的声明为int *n,它的类型明确是指向int的指针(int*),不存在其他类型定义。不过这里malloc分配的是sizeof(int*)大小的内存(即一个指针类型的字节数),而非sizeof(int),属于写法上的不规范,但不改变n本身的类型。

  • 是否把分配的内存当普通变量用:
    是的。这段代码里,n指向动态分配的一块内存,后续通过scanf("%d", n)往这块内存写入int值,再用*n读取该值,本质就是把这块动态内存当成了存储int的普通变量来使用。
    需要注意:如果系统中sizeof(int*)和sizeof(int)大小不同(比如64位系统中指针占8字节、int占4字节),这种写法会浪费部分内存;极端情况下若sizeof(int*)小于sizeof(int),还会导致内存越界,属于不规范写法,正确做法应该是malloc(sizeof(int))。

  • 是否存在指针类型转换:
    不存在将指向指针的指针(int**)转换为指向int的指针(int*)的操作。malloc返回的是void*类型,会被C语言隐式转换为int*赋值给n,这是合法的隐式转换,但整个过程中没有涉及int**类型的参与,只是分配内存的大小是指针类型的字节数而已。

代码运行截图

代码运行截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:49:17