指標引數傳遞

2021-06-28 07:07:18 字數 1563 閱讀 5632

本文源自

1、指標作為引數傳遞進去的僅僅只是指標的值,而不是指標的位址,或者說只是指標的乙份拷貝,例如:

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變數位址的拷貝,也叫傳值;

方法二傳入的是變數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...