C语言中,怎么使用malloc函数为数组指针分配空间 比如要为char *p[ ]分配空间,应该怎么弄

C语言中,怎么使用malloc函数为数组指针分配空间比如要为char*p[]分配空间,应该怎么弄... C语言中,怎么使用malloc函数为数组指针分配空间
比如要为char *p[ ]分配空间,应该怎么弄
展开
 我来答
百度网友b452582
2010-12-18 · TA获得超过2581个赞
知道小有建树答主
回答量:953
采纳率:100%
帮助的人:335万
展开全部
指针数组和数组指针是两个不同概念,你这里给出的定义实例实际上是指针数组的定义。
指针数组是指所定义数组的每个数组元素都是一个相应数据类型的指针,开设空间的操作可以应用循环语句进行,例如:对于char *p[10]; 可以应用
for(i=0;i<10;i++)
p[i]=(char *)malloc(sizeof(char)*N); //为每个指针申请开设N字符的存储空间
开设后,对于p的使用与二维数组的使用格式类似,可以有效的使用两个下标,
如 p[0][0]='A';
还可以像每个指针中赋值字符串: p[2]="Beijing"; 当然字符串长度应该小于N。

而数组指针,是指定义为指向某个固定大小顺序空间的指针,定义的格式如下:
char (*pa)[10]; //定义一个指向拥有10元素的字符数组的指针,
int (*p)[10];
应用格式可以参考下述程序,申请空间、赋值、输出后,可以观察到100被赋值到第五行第十个元素,指针可以像二维数组一样通过两个下标引用所申请开设的空间。
#include<alloc.h>
main()
{ int (*p)[10];
int i,j,k;
p=(int(*)[10])malloc(sizeof(int(*)[10])*5); //申请开设5个单元,每个单元拥有10个连续空间
p[4][9]=100;
for(i=0;i<5;i++)
{ for(k=0;k<10;k++)
printf("%8d",p[i][k]);
printf("\n");
}
}
25093791
2010-12-18 · TA获得超过253个赞
知道答主
回答量:499
采纳率:0%
帮助的人:355万
展开全部
这么再给大家说一下吧:我现在不明白C语言中动态内存分配的意义和作用,给一个已经分配了地址的指针重新分配空间,参数p为原有的空间地址,sizeof(int
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a11229229
2022-05-10
知道答主
回答量:10
采纳率:0%
帮助的人:2.6万
展开全部
这个回答主要是对@百度网友b452582 和@枫若神明 的补充,感谢及
数组指针版本的完善
malloc版
#include <stdio.h>
#include <stdlib.h>
int main() {
int (*p)[10];
int i, k;
p = (int(*)[10])malloc(sizeof(int[10]) * 5);
//申请开设5个单元,每个单元拥有10个连续空间
//sizeof(int(*)[10])是只是一个地址的长度8byte
for (i = 0; i < 5; i++) {
for (k = 0; k < 10; k++)
p[i][k]=(i+1)*(k+1);
}
p[4][9] = 100;
for (i = 0; i < 5; i++) {
for (k = 0; k < 10; k++)
printf("%d\t",p[i][k]);
printf("\n");
}
return 0;
}
/*
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 100
*/
calloc版#include <stdio.h>
#include <stdlib.h>
int main() {
int (*p)[10];
int i, k;
//void *calloc(size_t num_elements, size_t element_size);
p = (int(*)[10])calloc(sizeof(int), 10 * 5);
p[4][9] = 100;
for (i = 0; i < 5; i++) {
for (k = 0; k < 10; k++)
printf("%d\t",p[i][k]);
printf("\n");
}
return 0;
}
/*
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 100
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式