C語言指標傳參問題

2021-07-22 17:01:38 字數 1403 閱讀 6326

void pointer(int *p)

intmain()

the p

is0xbfd46498 , addr is -1076599652, *p is

22the p

is0xbfd46498 , addr is -1076599680, *p is

22the p

is0xbfd46498 , addr is -1076599680, *p is

11the p

is0xbfd4646c , addr is -1076599680, *p is

11the p

is0xbfd46498 , addr is -1076599652, *p is

11

1、例子中,指標p的拷貝傳入了方法中(其位址變了,說明是另一變數;值和指向的記憶體塊資料沒變)

2、將p的拷貝視作p1,p1改變了其所指向的記憶體塊的值為11

3、p1的值改變為a的位址,即p1指向a,此時p1與p分別指向不同的記憶體塊了,不會互相影響

4、方法結束,p位址和值沒變(改變的僅僅是p的拷貝p1),但是p所指向的記憶體塊資料被p1所改變了,故*p為11

值互換的兩種那個方式

void swap(int *a , int *b)//使用指標方式修改指向記憶體塊的值, 傳值方式

void swap(int &a , int &b)//使用引用方式,串引用方式

int a=3 , b=5

; printf("\n a addr : %d , b addr: %d", &a , &b);

printf(

"\n a : %d , b : %d

", a , b);

swap(&a , &b);

printf(

"\n a : %d , b : %d

", a , b);

printf(

"\n a : %d , b : %d

", a , b);

swap(a , b);

printf(

"\n a : %d , b : %d

", a , b);

a addr : -1076189224 , b addr: -1076189220

a : 3 , b : 5

a addr : -1076189248 , b addr: -1076189244

a : 5 , b : 3

a : -1076189224 , b : -1076189220

a addr : -1076189224 , b addr: -1076189220

a : -1076189224 , b : -1076189220

方法二傳入的是變數a、b,而不是拷貝(位址相同),又叫傳引用。

C語言 指標 「空指標」傳參問題

再談一談空指標傳參。寫平衡二叉樹時,因為傳遞進去了乙個結點,而結點指向空,所以無論其他地方怎麼改,都頻頻報錯。對於普通指標,我們要分清如果乙個指標本身是null,那意味著它指向空 但是,指標也是資料,他的二級指標可不是null,而是這塊指標的位址。void changep int p int mai...

指標傳參問題C

改變變數用一級指標,改變指標用二級指標 1 改變值 void fun int p void fun2 int p 改變變數用一級指標,改變指標用二級指標,main 2 改變指標 void getmem1 char s 想在函式中分配記憶體,再返回,徒勞無功 問題2 char getmemory vo...

C語言 函式傳參 傳值 傳指標 傳指標的指標

本文參考這兩篇文章 文章 一 文章二。在學習資料結構中建立單鏈表的時候,疑惑 已經定義了node,用到結構體指標的時候直接用 node就好了,為什麼還要再定義乙個 linklist呢,為什麼傳參的時候又要用linklist l呢?下面我們就來循序漸進,由淺入深來解決問題,這裡舉兩個例子作為比較。首先...