程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-指針數組中的malloc用法

c語言-指針數組中的malloc用法

編輯:編程綜合問答
指針數組中的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呢 它和二維數組有什麼不同?

最佳回答:


看起來你想在堆中分配指針:
你先看看我的代碼

#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
然後再賦值。
希望對你有用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved