我想知道是否有人可以解釋為什么 f2(a,a); 是 13 13 而不是 12 12?
這是否與 & 符號有關,如果有,它是什么意思?
提前致謝!
#include <iostream>
using namespace std;
void f1 (int a, int b){
a = 12; b = 13;
}
void f2 (int& a, int& b){
a = 12; b = 13;
}
int main()
{
int a = 10; int b = 11;
f1(a,b);
cout << a << ' ' << b << ' ';
f2(a,b);
cout << a << ' ' << b << ' ';
f2(a,a);
cout << a << ' ' << b;
}
uj5u.com熱心網友回復:
在您的呼叫中,f2(a, a)兩個引數都參考同一個變數 ( a)(與號表示“參考”),因此您要更改的就是這些。該函式首先為其分配 12,然后為它分配 13 - 這就是最終值。該變數b在main功能不受該函式呼叫改變,并保留其值(13),所以當你隨后列印a和b中main,你會得到13和13。
uj5u.com熱心網友回復:
這個功能
void f2 (int& a, int& b){
a = 12; b = 13;
}
通過參考接受其引數。所以稱之為
f2(a,a);
這兩個引數都是對同一個物件的參考a。
起初這個物件被分配了值 12
a = 12;
然后重新分配值 13
b = 13;
因此,產生的參考物件的值a是13。
為了更清楚,您可以通過以下方式想象函式呼叫及其定義(我將引數重命名為 a1 和 b1 以避免名稱沖突)
f2(a,a);
// ...
void f2 ( /* int& a1, int& b1 */ ){
int &a1 = a;
a1 = 12;
int &b1 = a;
b1 = 13;
}
因此,物件a正在通過對它a1和的參考進行更改b1。
也就是說,您可以宣告對同一物件的多個參考,并以任何順序使用這些參考來更改參考的物件。該物件將包含通過其中一個參考分配給它的最后一個值。
在此呼叫之前注意這一點
f2(a,a);
有以下電話
f2(a,b);
將變數的值設定b為13.
所以上面兩個呼叫之后的這個陳述句
cout << a << ' ' << b;
產出
13 13
uj5u.com熱心網友回復:
通過將這兩個引數分配a給f2(a,a);作為參考引數,您的代碼將按順序執行。所以a首先給定值 12(分配給a函式中形參的值),然后給同一個變數賦值 13(分配給b函式中形參的值)。該變數b在main你的程式的一部分,是為13的函式呼叫之后f2(a,b);。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329030.html
上一篇:每20毫秒定期運行執行緒失敗
