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呢?下面我們就來循序漸進,由淺入深來解決問題,這裡舉兩個例子作為比較。首先...