C语言用malloc定义二维数组问题
#include"stdio.h"#include"stdlib.h"main(){int**p,i;p=(int**)malloc(sizeof(int)*5);for...
#include "stdio.h"
#include "stdlib.h"
main()
{
int **p,i;
p=(int **)malloc(sizeof(int)*5);
for(i=0;i<5;i++)
{
p[i]=(int *)malloc(sizeof(int)*5);
}
}
为什么这样就定义了一个p[5][5]二维数组,还有p[i]=(int *)mallco(sizeof(int)*5);
为什么**p可以指向返回值为整形指针?
大家帮帮忙啊,讲解明白了,再加50分,出老本了! 展开
#include "stdlib.h"
main()
{
int **p,i;
p=(int **)malloc(sizeof(int)*5);
for(i=0;i<5;i++)
{
p[i]=(int *)malloc(sizeof(int)*5);
}
}
为什么这样就定义了一个p[5][5]二维数组,还有p[i]=(int *)mallco(sizeof(int)*5);
为什么**p可以指向返回值为整形指针?
大家帮帮忙啊,讲解明白了,再加50分,出老本了! 展开
4个回答
展开全部
首先,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:网上讲解指针的指针的文章多了去了,我在这里也讲不明白,那些文章都条例清晰,内容深入。。回答完毕,给点分下载文库吧
那么p和p+1,相差一个int类型嘛
p先申请了 5个数组长度
后来p[i]又申请了5个数组长度,分别保存在刚才申请的5个元素里
所以,这就相当于定义了P[5][5]咯。。这个大概就是这个意思啦,要画图的话,才好讲。。
至于第二个问题。。。听不懂,哈哈。。**p就是指向指针的指针嘛(不要骂人哈,本来就是嘛)
返回值只有相对于函数,才有返回值之说。。
通俗的讲,**p 是指针的指针, p[i]是指针
如果p定义为p[][],那么,p就是指针的指针, p[i]就是指针 和上面定义是一样的
PS:网上讲解指针的指针的文章多了去了,我在这里也讲不明白,那些文章都条例清晰,内容深入。。回答完毕,给点分下载文库吧
展开全部
首先要理解
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); // 给该指针分配内存
不知道这样是否能让你明白,不明白可追问
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); // 给该指针分配内存
不知道这样是否能让你明白,不明白可追问
更多追问追答
追问
p[i]不是指向指针的指针吗
追答
不对,p才是指向指针的指针,p[i]是指针而已
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
地址数据就是一个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个等等
}
}
指针变量是用来存储地址的。也就是说,变量的值是个地址值,是个整型数!
因此,指针分配空间按整型类型分配空间就可以了!
关于指针的数据类型,那是为存储和访问地址中的数据准备的。
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个等等
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p是一个指向指针的指针,在上例中,你用malloc函数开辟的一段内存赋给了p,简单的理解,其实p就是一个数组(以下我称为p数组),不过数组中存放的都是指针,即p是一个指针数组,数组中存放了5个指向int型的指针,你知道一个普通的数组可用它的数组名进行访问例如:a[5]就可用*a访问其第一个元素。
同理用*p就可访问p数组的第一个元素,*p+1访问第二个元素,以此类推,而*p中存放的又是一个指针,所以**p就可以指向一个整形数据
同理用*p就可访问p数组的第一个元素,*p+1访问第二个元素,以此类推,而*p中存放的又是一个指针,所以**p就可以指向一个整形数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询