内部函数打印不同的指针地址

use*_*685 5 c pointers

我是C和指针的新手.以下是我正在尝试的一些代码.

struct node{
    struct node * next;
    struct node * prev;
    int num;
 };

 void func(struct node * leaf , struct node ** add_leaf){
     printf("function starts");
     printf("&leaf = %p  add_leaf = %p\n" , &leaf , add_leaf);
     printf("leaf = %p  *add_leaf = %p\n" , leaf , *add_leaf);
     printf("function over");
     return
 }


 void main(){
     struct node * leaf = (struct node*)malloc(sizeof(struct node));
     printf("leaf = %p\t&leaf = %p\n" , leaf , &leaf);
     func(leaf , &leaf);
 }
Run Code Online (Sandbox Code Playgroud)

leaf和*add_leaf的值相等,这正是我所期望的.但是我无法理解为什么在函数内部打印时,&leaf和add_leaf的值存在差异.在这里,我试图打印节点指针叶的地址.

Ale*_*ler 3

leaf中的局部变量在调用main时被复制。func这意味着,局部变量leafinside与insidefunc具有相同的值,即它指向相同的内存地址(因此与第二次检查等效),但它本身存储在不同的地址。leafmain