C++值傳遞傳入和傳出詳細講解
阿新 • • 發佈:2021-01-14
我們知道,通常我們定義的函式很多都是帶引數的,用來傳入和傳出資料,下面,我將舉例來演示傳入傳出過程。
1.無傳入,無傳出。
class Cout{
public:
static int x;
static int y;
int add();
};
int Cout::x=5;
int Cout::y=6;
int Cout::add()
{
int z=x+y;
return z;
}
int main()
{
Cout c;
cout<<c.add()<<endl;
}
結果:
分析:這是計算類中的兩個靜態成員變數,我們並沒有在add函式中進行傳遞引數,也可以獲得結果。
2.有傳入,無傳出。
int Add(int x,int y)
{
return x+y;
}
int main()
{
cout<<Add(1,2)<<endl;
}
結果:
分析:這是一個簡單的加法函式,只將引數傳入函式,不傳出引數,但是我們可以通過return獲取需要的結果。
3.無傳入,有傳出。
class Send{ public: bool A(char* a); bool B(char* b); }; bool Send::B(char* c) { char b[4]="aaa"; strcpy(c,b); return true; } bool Send::A(char* a) { if(this->B(a)) return true; return true; } int main() { Send send; char k[5]; send.A(k); cout<<k<<endl; }
結果:
分析:定義了Send類其中有兩個函式A和B,B的作用是將字串"aaa"的地址拷貝到c地址中,A的作用是呼叫B函式。
當執行send.A(k)時,進入A函式,此時a為k,呼叫B函式B(a)=B(k),進入B函式,此時,c為k,strcpy(c,b)為strcpy(k,b),此時k為"aaa",A函式此時可以獲取k的值。
4.有傳入,有傳出。
class Send{ public: bool A(char*b,char* c); bool B(char* c,char* d); }; bool Send::B(char* c,char* d) { strcpy(c,d); return true; } bool Send::A(char* a,char* c) { if(this->B(a,c)) return true; return true; } int main() { Send send; char k[5]; send.A(k,"AAA"); cout<<k<<endl; return 0; }
結果:
分析:以上為第三種情況的拓展,定義了Send類,其中有兩個函式,A()和B(),B函式的作用是將地址d中的字串拷貝到c地址中,A函式的作用是傳入字串的地址且傳入B函式中。
可能有點難理解
分步為:
當我們send.A(k,“AAA”)時,首先進入函式A
此時函式A中的c就成了"AAA",然後呼叫B函式為B(k,“AAA”)
再進入B函式,此時,B函式中的c和d為 k和"AAA"
然後strcpy(c,d);就是strcpy(k,“AAA”),這時,k=“AAA”。
我們呼叫完後,可以獲取k的值。