如何理解指向指针的指针
答案:2 悬赏:80 手机版
解决时间 2021-01-30 08:05
- 提问者网友:几叶到寒
- 2021-01-29 09:25
如何理解指向指针的指针
最佳答案
- 五星知识达人网友:不甚了了
- 2021-01-29 09:31
其实你的理解是完全正确的,只不过在这里你没有把malloc这个函数完全理解。函数CreateList()是为了创建一个列表。
所以根据你的第一段代码你会这样写:
LinkList* ha;
CreateList(&ha);
而根据你的第二段代码你会这样:
LinkList* ha;
CreateList(ha);
第二段代码的ha完全是如你所说的那样是值传递的。再看你的函数体,我们知道形参名为L,它所指向的地址会等于ha所指向的地址(也就是说L的值等于ha的值)。可是在你的函数体内你用malloc申请了一块内存,你把这块内存的地址赋值给了L(此时L的值就不再等于ha的值了)现在malloc所申请有内存也只有L能引用,而ha根本没有得到分配的内存。
如果用你的第一段代码:
我们知道传进去的是ha的地址。此时你把malloc申请的内存的地址赋值给*L,而*L刚好也就是ha。所以也就相当于给ha申请了一块内存。*L和ha都指向了新开辟的内存。这才算得上是真正的创建了一个列表。
malloc这个函数是在内存中申请一片空间,并返回指向这片空间的地址。
所以根据你的第一段代码你会这样写:
LinkList* ha;
CreateList(&ha);
而根据你的第二段代码你会这样:
LinkList* ha;
CreateList(ha);
第二段代码的ha完全是如你所说的那样是值传递的。再看你的函数体,我们知道形参名为L,它所指向的地址会等于ha所指向的地址(也就是说L的值等于ha的值)。可是在你的函数体内你用malloc申请了一块内存,你把这块内存的地址赋值给了L(此时L的值就不再等于ha的值了)现在malloc所申请有内存也只有L能引用,而ha根本没有得到分配的内存。
如果用你的第一段代码:
我们知道传进去的是ha的地址。此时你把malloc申请的内存的地址赋值给*L,而*L刚好也就是ha。所以也就相当于给ha申请了一块内存。*L和ha都指向了新开辟的内存。这才算得上是真正的创建了一个列表。
malloc这个函数是在内存中申请一片空间,并返回指向这片空间的地址。
全部回答
- 1楼网友:七十二街
- 2021-01-29 10:51
指针函数不同于函数指针。
函数指针声明为指针,它与变量指针不同之处是,它不是指向变量,而是指向函数。
函数指针有两个用途:调用函数和做函数的参数.
指针函数是函数,函数返回的不是数值,而是指针。
写法:
返回类型标识符 *返回名称(形式参数表){ 函数体 }
例如:
float *find();
main()
{
static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
float *p;
int i,m;
printf("enter id: 1 or 2 or 3:");
scanf("%d",&m);
printf("goup %d data are:\n",m);
p=find(score,m-1);
for(i=0;i<4;i++) printf("%5.2f\t",*(p+i));
}
float *find(float(*pionter)[4],int n)
{
float *pt;
pt=*(pionter+n);
return(pt);
}
指针函数是不是很有用处,我也说不上来。不用它,也可以用别的方法写程序。用不用,是个人喜好。
但无论怎么说,指针函数,函数指针,指向指针的指针给了编程者更多的方法的选择,增加了灵活性和多样性。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯