Code Bye

关于C中二级指针传参

#include <stdio.h>
#include <stdlib.h>
#define m 3
#define n 4
typedef struct Lnode
{
    int data;
    struct Lnode *next;
}Lnode,*Linklist;//节点类型和指向结构的指针类型
void CreatlistF(Linklist *L);
void main ()
{
    Linklist L1;
//  Linklist p;//等价于Lnode *p;
    //p=&L;
    CreatlistF(&L1);
    printf("\n");
}
void CreatlistF(Linklist *L)
{
    *L=(Linklist)malloc(sizeof(Lnode));
    printf("\n");
}

代码如上,在调试过程中出现如下图结果:




这个过程表明,L1指向了这块分配好的内存地址
本人不是太明白:
malloc函数返回一个指向内存地址的指针,这个指针值赋值给L指针,原因是L存储的是L1自身的存储地址,因此这个操作是不是应该理解为将L1自身的存储地址设为了这块分配的内存地址呢?

解决方案

20

原因是你要在函数内修改指针的指向,所以必须传一级指针的引用或二级指针。
L是指针本身在栈上的地址,而*L才是指针所指向的区域的地址
所以写成:
*L=(Linklist)malloc(sizeof(Lnode));

20

假如要在函数中修改指针的值,需要传入一个二级指针,这样才能在函数中修改指针的值,否则传入的变量是按值传递的,也就是复制进去的,你在函数中修改一个复制后的指针是没什么用的
你程序中的L是一个二级指针,修改时直接*L = … 即可修改到

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于C中二级指针传参