#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呢 它和二维数组有什么不同?
指针数组中的malloc用法
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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
然后再赋值。
希望对你有用本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 请问一下这个运行结果是怎么来的
- ¥15 这个复选框什么作用?
- ¥15 单通道放大电路的工作原理
- ¥30 YOLO检测微调结果p为1
- ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
- ¥15 DS18B20内部ADC模数转换器
- ¥15 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下