二級指標與一級指標的一些區別

2021-08-05 19:04:42 字數 1349 閱讀 4745

#include

using namespace std;

void modifypointer(int*);

void modifypointer(int**);

int  main(){

int *pointer;

int n = 100;

pointer = &n;

modifypointer(pointer);

cout << "呼叫modifypointer(int*)" << *pointer << endl;

modifypointer(&pointer);

cout << "呼叫modifypointer(int**)" << *pointer;

return 0;

void modifypointer(int *pointer){

int k = 1;

pointer = &k;

void modifypointer(int **pointer){

int k = 1;

*pointer = &k;

1、將指標 pointer 作為引數傳遞給函式 modifypointer(int* pointer) 時,實際傳遞的是指標的值(&n),而不是指標本身(&pointer)

---->函式 modifypointer(int* pointer)也會新建乙個int *pointer 的區域性變數,來接收 &n(即是 int *pointer;pointer = &n;的簡寫)

所以在 modifypointer(int* pointer) 中修改 pointer (pointer = &k;)時修改的是區域性的 pointer,而不是從 main 函式傳遞過來的

全域性pointer,所以不會影響 main 函式中的 pointer

2、將指標 pointer 作為引數傳遞給函式 modifypointer(int** pointer) 時,實際傳遞的值是(&pointer),函式modifypointer(int** pointer)

會新建乙個 int **pointer(區域性) 的區域性變數來接收 &pointer(全域性)(即是 int **pointer(區域性);pointer(區域性) = &pointer(全域性)

,-----此時,pointer(區域性) == &pointer(全域性);*pointer(區域性) == pointer(全域性) == &n;**pointer(區域性) == *pointer(全域性)== n

當執行 *pointer = &k時,實際執行的是 pointer(全域性) = &k;所以此時修改區域性的 pointer 也修改了 main 函式傳遞過來的全域性的 pointer,

一級指標與二級指標

如下圖所示,整型指標xptr指向變數x的位址。原始碼 include int main 實現方法一如下圖所示,先為二級整型指標ptr分配空間,然後賦值。原始碼 include include int main printf n return 0 執行結果 實現方法二 如下圖所示,先為二級整型指標pt...

一級指標二級指標

例如 int p null int代表指標p指向的資料型別是int型,代表這是乙個指標變數,1 指標變數儲存的內容是指向的變數的位址 2 在使用sizeof判斷指標的位元組數時,在32位機器上為4個位元組,在64位機器上為了相容,仍然是四個位元組大小 3 小知識點,不同型別的指標除了指向的變數資料型...

二級指標與一級指標重溫

今天在和同學討論為了介面的一致性,怎麼處理野指標的問題,我就想在以前寫過的鍊錶中練習一下。選擇了在雙向迴圈鍊錶中erase節點時,傳入二級指標並置空他。沒想到遇到了問題,曾經以為對二級指標,一級指標的問題已經了解了,因為在單鏈表中,頭插,尾插中已經訓練過,在鍊錶為空時有3種處理辦法。第一種,是需要傳...