JoyHu1412 2014-12-10 02:43 采纳率: 50%
浏览 4263
已采纳

指针数组中的malloc用法

#include
#include
void sort(char a[]); //将6,8行去掉 13 14 行a 改为p即可
int main()
{
char *a[5];
char **p;
p = a; //等价于*p=a[0]
int i;
p=(char
*)malloc(5*sizeof(char*)); //这一行不加的话后面的程序就能运行。
for(i=0;i<5;i++){
a[i]=(char*)malloc(20*sizeof(char));
gets(a[i]);}
//请问为什么是这样的呢 为什么p不需要malloc呢 它和二维数组有什么不同?

  • 写回答

5条回答 默认 最新

  • Landpack 2014-12-14 08:50
    关注

    看起来你想在堆中分配指针:
    你先看看我的代码

    #include <stdio.h>
    #include <stdlib.h>
    void sort(char a[]);
    int main(void)
    {
        char a[5]="abcd";
        char b[5]="efgh";
        char c[5]="ijkl";
        char d[5]="nmop";
        char e[5]="rstu";
    
        char * pa[5];
    
        pa[0]=a;
        pa[1]=b;
        pa[2]=c;
        pa[3]=d;
        pa[4]=e;
    
        puts(pa[0]);//should output "abcd"
        puts(pa[1]);//should output "efgh"
    
        char **p;
        p=pa;//just like you p=a
    
        void **p_void;
        puts(*p);//should output "abcd"
    
        int i;
        p_void=(char **)malloc(5*sizeof(char*));
        p_void=pa;
        for(i=0;i<5;++i,++p_void)
            puts(*p_void);
        //char ** p;
        //p=a;
        //puts(a[0]);
        //puts(*p);
        return 0;
    }
    
    
    

    你直接char **p
    就已经自动分配内存拉。
    看起来你是想像访问普通结构一样申请堆中分配。
    如果是这样的话,你应该声明为void类型的然后分配用malloc
    然后再赋值。
    希望对你有用

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 这个复选框什么作用?
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下