これは、値渡しまたは参照渡しとしてカウントされますか?
「関数に配列を渡す」と言うと、実際には最初の要素へのポインタが関数に渡されます。これにより、呼び出された関数が配列の内容を変更できるようになります。作成される配列のコピーがないため、配列は参照によって渡されると言うことは理にかなっています。
これを行う方法のヒントはありますか?
テストは次のようにする必要があります。
- でローカル配列を作成します
main()
。
- 既知のパターンで埋める
- 配列の内容を出力する
- 配列を関数に渡す
- 関数本体内で配列の内容を変更します
- 関数内の配列を出力します
main()
ローカル配列の内容をもう一度印刷します
- 出力が
6
一致7
する場合。あなたには証拠があります。
配列をどのように値渡ししますか?
配列を値で渡す唯一の可能な方法は、構造体でラップすることです。
オンラインサンプル:
#include <iostream>
struct myArrayWrapper
{
int m_array[5];
};
void doSomething(myArrayWrapper a)
{
int* A = a.m_array;
//Display array contents
std::cout<<"\nIn Function Before Modification\n";
for (size_t j = 0; j < 5; ++j)
std::cout << ' ' << A[j];
std::cout << std::endl;
//Modify the array
for (size_t j = 0; j < 5; ++j)
A[j] = 100;
std::cout<<"\nIn Function After Modification\n";
//Display array contents
for (size_t j = 0; j < 5; ++j)
std::cout << ' ' << A[j];
std::cout << std::endl;
}
int main()
{
myArrayWrapper obj;
obj.m_array[0] = 0;
obj.m_array[1] = 1;
obj.m_array[2] = 2;
obj.m_array[3] = 3;
obj.m_array[4] = 4;
doSomething(obj);
//Display array contents
std::cout<<"\nIn Main\n";
for (size_t j = 0; j < 5; ++j)
std::cout << ' ' << obj.m_array[j];
std::cout << std::endl;
return 0;
}
出力:
In Function Before Modification
0 1 2 3 4
In Function After Modification
100 100 100 100 100
In Main
0 1 2 3 4