我的模塊試圖按照以下程序的方式執行:子函數嘗試修改一個結構的元素,並將其返回給該結構通過引用傳遞給它的函數。結構的結構成員是否通過引用傳遞,僅通過值傳遞?
#include <iostream>
#include <vector>
using namespace std;
struct a
{
int val1;
vector<int> vec1;
};
struct a* foo();
void anotherfunc(struct a &input);
int main()
{
struct a *foo_out;
foo_out = foo();
cout<< "Foo out int val: "<< foo_out->val1<<"\n";
cout<< "Foo out vector size: "<< foo_out->vec1.size()<< "\n";
cout<< "Foo out vector value1: "<< foo_out->vec1.at(0)<< "\n";
cout<< "Foo out vector value2: "<< foo_out->vec1.at(1)<< "\n";
return 0;
}
struct a *foo()
{
struct a input;
input.val1=729;
anotherfunc(input);
return &input;
}
void anotherfunc(struct a &input)
{
input.vec1.push_back(100);
input.vec1.push_back(1000);
input.vec1.push_back(1024);
input.vec1.push_back(3452);
cout<< "Anotherfunc():input vector value1: "<< input.vec1.at(0)<< "\n";
cout<< "Anotherfunc():input vector value2: "<< input.vec1.at(1)<< "\n";
cout<< "Anotherfunc():input int val: "<< input.val1<< "\n";
}
我期待的主要功能包含在結構(729)修改後的整數值,並且還矢量值(100,10000,1024和3452)。相反,main沒有這些值,並且在g ++上,程序顯示了一個奇怪的行爲:main()表明vector結構中有4個元素,但是當試圖打印值時,segfaults。
經過一番思考,我假設我的問題是:「結構的結構成員是否通過引用傳遞,僅通過值傳遞?」我不應該期望該向量具有通過引用傳遞整個結構的函數設置的值嗎?請幫助。
維傑
你似乎在處理「結構」,就好像你還在寫C一樣。停止在每個地方寫'struct'; 'a'本身就是一種類型。 –