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

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

指针数组和数组指针是两个不同概念,你这里给出的定义实例实际上是指针数组的定义。
指针数组是指所定义数组的每个数组元素都是一个相应数据类型的指针,开设空间的操作可以应用循环语句进行,例如:对于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");
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-18
这么再给大家说一下吧:我现在不明白C语言中动态内存分配的意义和作用,给一个已经分配了地址的指针重新分配空间,参数p为原有的空间地址,sizeof(int
第2个回答  2022-05-10
这个回答主要是对@百度网友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
*/

C语言中,怎么使用malloc函数为数组指针分配空间 比如要为char *p...
p[i]=(char *)malloc(sizeof(char)*N); \/\/为每个指针申请开设N字符的存储空间 开设后,对于p的使用与二维数组的使用格式类似,可以有效的使用两个下标,如 p[0][0]='A';还可以像每个指针中赋值字符串: p[2]="Beijing"; 当然字符串长度应该小于N。而数组指针,是指定义为指向某个固...

c语言中malloc是什么?怎么用?
malloc() 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。如果希望在分配内存的同时进行初始化,请使用 calloc() 函数。【返回值】分配成功返回指向该内存的地址,失败则返回 NULL。操作:由于申请内存空间时可能有也可能没有,所以需要自...

C语言 malloc函数怎么用的..就是动态初始化字符指针数组.
如果是字符指针数组,则就是二级指针了,如果分配n * m数组,则:int i, n = 10; m = 20;char **p = (char**)malloc(n * sizeof(char*));for(i = 0; i < n; ++i)p[i] = (char*)malloc(m * sizeof(char));

C语言malloc与free函数的用法
功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。【例】分配一块区域,输入一个学生数据。main(){ struct stu { int num;char *name;char sex;float score;} *ps;ps=(struct stu*)malloc(sizeof(...

C语言 malloc()函数 分配内存空间尺寸的问题
malloc是给指针变量分配内存空间的函数命令 正确使用:分配的空间要能保证容下你想存储的数据,不要和机器逗着玩(分配0空间,或少于自己实际需要的空间),如你上面的操作,表面上你程序运行没有问题,可实际上你占用了别人的地盘,只是当前你很幸运没有使程序出现问题,但不保证一定不出问题!!不再...

C语言:动态内存函数:malloc的使用详解
动态内存管理在C语言中至关重要,尤其是在空间需求不确定时。传统的数组分配方式有其局限性,固定大小且在编译时确定空间。当运行时空间需求变化时,malloc函数就显得尤为关键。malloc函数用于动态内存分配,其基本使用语法是:size_t malloc(size_t size);这里的size_t是一个无符号整型,代表你需要的内存...

C语言中的动态内存分配的用法举例
1、malloc函数:其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。2、free函数:由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,...

malloc怎么使用,请举例说明,谢谢!
malloc使用须要包括头文件:include 'stdlib.h'例如:int *p;p = new int; \/返回类型为int* 类型(整数型指针)。分配大小为 sizeof(int);或:int* parr;parr = new int [100]; \/\/返回类型为 int* 类型(整数型指针)。分配大小为 sizeof(int) * 100;而 malloc 则必须由我们计算要字节...

在C语言中如何使用malloc动态申请一维数组?
malloc()函数用来动态地分配内存空间,其原型为:void*malloc(size_tsize);描述:(参数描述)Size是以字节为单位分配的内存空间量。【功能描述】Malloc()在堆中分配指定大小的内存空间来保存数据。函数执行后,此内存空间未初始化,且其值未知。如果希望在分配内存的同时进行初始化,可以使用calloc...

C语言calloc的用法?
void *calloc(size_t nobj, size_t size);calloc函数为由nobj个长度为size的对象组成的数组分配内存,并返回指向分配区域的指针;若无法满足要求,则返回NULL。该空间的初始长度为0字节 void *malloc(size_t size);malloc函数为长度size的对象分配内存,并返回指向分配区域的指针;若无法满足要求,则...

相似回答