下面是一些將雙指針傳入函數的代碼。雙指針然後被分配在函數中創建的指針的地址。當我打印出存儲在雙指針中的地址時,它會打印NULL,這是我在將它傳遞給函數之前最初給出雙指針的值。將一個雙指針傳遞給一個函數,併爲它指定一個函數本地指針的地址
#include <stdio.h>
#include <stdlib.h>
struct node
{
int value;
};
void append(struct node **nodePtr);
int main()
{
struct node **nodePtr = NULL;
append(nodePtr);
printf("\nnodePtr = %p", nodePtr);
return 0;
}
void append(struct node **nodePtr)
{
// creating new node
struct node *currentNode = malloc(sizeof(struct node));
// assigning the address of currentNode to the double pointer NodePtr
nodePtr = ¤tNode;
printf("\n¤tNode = %p", ¤tNode);
}
This is the result I get when I run the code
我知道,如果你傳遞一個指針到它通過引用傳遞的功能,這意味着您對在函數指針的任何變化,當你外部訪問指針不會消失功能。
我的問題是,爲什麼我不能訪問函數外的currentNode的地址。我把它分配給一個雙指針,所以我應該能夠訪問它的功能?對?
上面已經被回答
謝謝您的回答保羅,它的工作完美。我試圖擴展到代碼。我想將nodePtr分配給名爲頭部的結構指針。當我調用函數時,我想將currentNode中的地址存儲到頭指針中。
最初我以爲改變下面顯示的函數內部的代碼將工作。
*nodePtr = currentNode;
但這不起作用,因爲我只是改變nodePtr中的內容而不是head中的內容。
然後我試着將nodePtr初始化爲head的地址。
struct node *nodePtr = &head;
但這不起作用,因爲它不是一個雙指針。如果我將它初始化爲一個雙指針,我就遇到了我之前做過的同樣的問題。下面
是我的代碼到目前爲止
#include <stdio.h>
#include <stdlib.h>
struct node
{
int value;
};
void append(struct node **nodePtr);
int main()
{
struct node *head = NULL;
struct node *nodePtr = head;
append(&nodePtr);
printf("%p", head);
return 0;
}
void append(struct node **nodePtr)
{
// creating new node
struct node *currentNode = malloc(sizeof(struct node));
// assigning the address of currentNode to the double pointer NodePtr
*nodePtr = currentNode;
}
沒有「雙指針」這樣的東西。只有指針。指針可以指向任何東西,包括指針。指向指針的指針仍然只是指針,而不是「雙指針」。如果你牢記這一點,很多混亂應該消失。 – gnasher729