本文源自
1、指標作為引數傳遞進去的僅僅只是指標的值,而不是指標的位址,或者說只是指標的乙份拷貝,例如:
void pointer(int *p)1、例子中,指標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
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變數位址的拷貝,也叫傳值;
方法二傳入的是變數a、b,而不是拷貝(位址相同),又叫傳引用。
指標引數傳遞
字串傳遞1 void test char p1 int main 方法2 void test char p1 int main 方法3 void test char p1 int main 以下是錯誤的,因為在函式體內改變p1本身的值,不會影響實參p1本身的值 static char a 100 v...
指標引數傳遞
relation 1 指標作為引數傳遞進去的僅僅只是指標的值,而不是指標的位址,或者說只是指標的乙份拷貝,例如 void pointer int p int main the p is 0xbfd46498 addr is 1076599652,p is 22the p is 0xbfd46498 ...
指標引數傳遞
1 指標作為引數傳遞進去的僅僅只是指標的值,而不是指標的位址,或者說只是指標的乙份拷貝,例如 void pointer int p intmain the p is0xbfd46498 addr is 1076599652,p is 22the p is0xbfd46498 addr is 1076...