#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));
L是指针本身在栈上的地址,而*L才是指针所指向的区域的地址
所以写成:
*L=(Linklist)malloc(sizeof(Lnode));
20
假如要在函数中修改指针的值,需要传入一个二级指针,这样才能在函数中修改指针的值,否则传入的变量是按值传递的,也就是复制进去的,你在函数中修改一个复制后的指针是没什么用的
你程序中的L是一个二级指针,修改时直接*L = … 即可修改到
你程序中的L是一个二级指针,修改时直接*L = … 即可修改到