指针和双重指针的区别

来源:百度知道 编辑:UC知道 时间:2024/07/05 03:31:04
概念性的我懂,我遇到一个函数,用双重指针作参数是就可以实现我要的功能,单用指针就不行。问什么呢?
#include<stdio.h>
#include<stdlib.h>
typedef enum{atom,list} NodeTag;
typedef char DataType;
typedef struct GLnode
{
NodeTag tag;
union
{
DataType data;
struct GLnode *slink;
}da;
struct GLnode *link;
}GLNode;

void Create(GLNode **GL)
{
DataType x;
scanf("%c",&x);
if(x==' ')
*GL=NULL;
else if(x=='(')
{
*GL=malloc(sizeof(GLNode));
(*GL)->tag=list;
Create(&((*GL)->da.slink));
}
else
{
(*GL)=malloc(sizeof(GLNode));
(*GL)->tag=atom;
(*GL)->da.data=x;
}
scanf("%c",&x);
if(*GL==NULL)
{
;
}
else if(x==',')
{
Create(&((*GL)->link));
}
else if((x==')') || (x==';'))
{
(*GL)->link=NULL;
ret

GL是指针型,你的目的不就是通过调用函数来使GL的值变化嘛.所以你传递的时候只能传递GL的地址,而不能传递GL本身,而GL本身又是一个指针型,传一个指针型的地址当然得二级指针.你如果把被调函数改成一级指针,那么GL的值是不会变的,形参变了,但实参还是原来那样.所以达不到调用函数的功能
这和其他类型一个道理,要传递变量的地址才能使变量的值发生变化.现在的变量是指针型,所以要传指针类型的地址,只能是二级指针.