#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 = … 即可修改到