C语言用malloc定义二维数组问题

2024-11-14 23:41:27
推荐回答(4个)
回答1:

首先,p的类型为 int **
那么p和p+1,相差一个int类型嘛

p先申请了 5个数组长度
后来p[i]又申请了5个数组长度,分别保存在刚才申请的5个元素里

所以,这就相当于定义了P[5][5]咯。。这个大概就是这个意思啦,要画图的话,才好讲。。

至于第二个问题。。。听不懂,哈哈。。**p就是指向指针的指针嘛(不要骂人哈,本来就是嘛)

返回值只有相对于函数,才有返回值之说。。
通俗的讲,**p 是指针的指针, p[i]是指针
如果p定义为p[][],那么,p就是指针的指针, p[i]就是指针 和上面定义是一样的

PS:网上讲解指针的指针的文章多了去了,我在这里也讲不明白,那些文章都条例清晰,内容深入。。回答完毕,给点分下载文库吧

回答2:

首先要理解
int* ptr = (int*)malloc(5 * sizeof(int)); // 动态分配5个整型的内存空间,跟int a[5]相似,但前者是堆上分配的,后者是栈上分配的

p=(int **)malloc(sizeof(int*)*5); // 意思就是定义一个有5个int类型的指针的动态数组,然后在里面存放指针

p[i] 其实就是一个指针

p[i]=(int *)malloc(sizeof(int)*5); // 给该指针分配内存

不知道这样是否能让你明白,不明白可追问

回答3:

地址数据就是一个long类型的数据。一般在32位机上long 和int 占一样的空间,都是四个字节。
指针变量是用来存储地址的。也就是说,变量的值是个地址值,是个整型数!
因此,指针分配空间按整型类型分配空间就可以了!
关于指针的数据类型,那是为存储和访问地址中的数据准备的。
main()
{
int **p,i;
p=(int **)malloc(sizeof(int)*5); //先分配五个整型数据空间,这5个空间就可以用来存储每个二级指针的首地址了。
for(i=0;i<5;i++)
{
p[i]=(int *)malloc(sizeof(int)*5); //再为每个二级指针分配5个整型数据空间,这样,每个元素也就拥有了各自的家。只是这5个空间是用来存储整数的!!p[0]5个,p[1]5个等等
}
}

回答4:

p是一个指向指针的指针,在上例中,你用malloc函数开辟的一段内存赋给了p,简单的理解,其实p就是一个数组(以下我称为p数组),不过数组中存放的都是指针,即p是一个指针数组,数组中存放了5个指向int型的指针,你知道一个普通的数组可用它的数组名进行访问例如:a[5]就可用*a访问其第一个元素。
同理用*p就可访问p数组的第一个元素,*p+1访问第二个元素,以此类推,而*p中存放的又是一个指针,所以**p就可以指向一个整形数据