int a = 5;
int* b = &a;//這里寫成int *b = &a;是等價的
*b = 6;
int* b = &a;表示定義一個int類型的指針b,該指針指向a變量的地址。*b = 6;表示將b指針指向地址存儲的值改為為6,這時候a變量的值也變為了6,因為a變量的地址所存儲值已經被修改了。
int a = 5;
int b = a;
b = 6;
運行以上代碼后a的值為5。int b = a;表示重新開辟一個地址給變量b,該地址存儲的值與a變量地址存儲的值一致。b = 6;改變的是b變量的地址所存儲的值,所以a變量的地址存儲的值還是5。
int a = 5;
int& b = a;//這里寫成int &b = a;是等價的
b = 6;
int& b = a;表示定義一個變量b,這里的b是一個變量名不是一個指針,但是這個b變量的地址和a變量的地址是同一個地址。所以b = 6;這里改變b變量指定的地址的值,a變量的值也改變了。
定義方法的時候,int add(int& a,int& b){}和int add(int a,int b){}的區別:
int add(int a,int b){}在調用方法傳入參數的時候,方法內部會定義兩個變量a和b,並且會為這兩個變量開辟新的的地址,然后將傳入的參數的值賦值到這兩個地址。也就是說相對於拷貝了一份傳入的參數,在方法內改變a和b的值不影響外部傳入的參數的值。
int add(int& a,int& b){}在調用方法傳入參數的時候,方法內部會定義兩個變量a和b,但是並不會為這兩個變量開辟新的地址,而是分別指向傳入的兩個參數的地址,這時候在方法內部改變a和b的值,相當於修改外部傳入參數的值,因為他們是同一份數據。