c++の配列をパラメータとして関数に入力
2920 ワード
前言:最近、c++で配列を書いて逆行列を求めるプログラムを見ていますが、それはかなり煩雑ですが、面白いです.その中で大量の配列演算が関与しているので,配列はパラメータ伝達関数として重要であり,ここで記録する.
パラメータとして1 D配列
1.配列名を関数に入力するほか、正規化のために、関数内でサイズを定義するのではなく、配列のサイズもパラメータとして入力します.すなわち、次のような形式です.
2.我々はcを学ぶときに配列名が先頭要素のアドレスであることを知っているので、実際に関数に伝わるのは配列名ではなく先頭要素のアドレスなので、上記の宣言形式のほかに、
1つ目は直感的によく理解され、2つ目は最も現実に合っている.
いずれの定義も、関数を使用する場合は配列名をパラメータとして使用します.例:
3.四角カッコ表現を使用して長さを渡さない:
4.いずれの宣言方式においても、関数内部で入力された配列を変更すると、その配列自体の値も変更され、参照に似ています.これは、前述した入力がアドレスであり、アドレス上の要素を直接変更するためです.
5.関数で配列が変更されないようにconstを使用します.メソッド:宣言されたパラメータの前にconstを追加する
6.c++では、配列区間を使用する新しい方法が導入された.前は配列の先頭要素のアドレスと長さを入力して、このようにすべての要素を処理することができて、もちろん私達も配列の先頭要素のアドレスと末尾のアドレスを入力することができて、パラメータは【配列名、配列名+長さ】で、このようにすべての要素を処理することができて、これは配列区間です.自然に、私達も任意の区間を入力することができます.
たとえば、次のコードがあります.
パラメータとして2 D配列
1次元配列と同様に、2つの宣言方法がありますが、違いは列数を書かなければならないことです.1つ目:
1つ目:
使用方法は同じです.
注意:同様に、どの宣言方式でも、関数の内部で入力された配列を変更すると、その配列自体の値も変更され、参照に似ています.これは、前述した入力がアドレスであり、アドレス上の要素を直接変更するためです.
例:マトリクスの回転を2 D配列で実現するには:
また、このプログラムは一つのクラスに書けるといいです.
パラメータとして1 D配列
1.配列名を関数に入力するほか、正規化のために、関数内でサイズを定義するのではなく、配列のサイズもパラメータとして入力します.すなわち、次のような形式です.
int sum_arr (int att[] , int size)
2.我々はcを学ぶときに配列名が先頭要素のアドレスであることを知っているので、実際に関数に伝わるのは配列名ではなく先頭要素のアドレスなので、上記の宣言形式のほかに、
int sum_arr (int *att , int size)
1つ目は直感的によく理解され、2つ目は最も現実に合っている.
いずれの定義も、関数を使用する場合は配列名をパラメータとして使用します.例:
sum_arr (Ss , 66);
3.四角カッコ表現を使用して長さを渡さない:
int sum_arr (int att【size】) //
4.いずれの宣言方式においても、関数内部で入力された配列を変更すると、その配列自体の値も変更され、参照に似ています.これは、前述した入力がアドレスであり、アドレス上の要素を直接変更するためです.
5.関数で配列が変更されないようにconstを使用します.メソッド:宣言されたパラメータの前にconstを追加する
int sum_arr (const int att[] , int size)
6.c++では、配列区間を使用する新しい方法が導入された.前は配列の先頭要素のアドレスと長さを入力して、このようにすべての要素を処理することができて、もちろん私達も配列の先頭要素のアドレスと末尾のアドレスを入力することができて、パラメータは【配列名、配列名+長さ】で、このようにすべての要素を処理することができて、これは配列区間です.自然に、私達も任意の区間を入力することができます.
たとえば、次のコードがあります.
int sum_arr(const int *begin,const int *end)
{
const int *pt;
int total = 0;
for(pt = begin ; pt != end ; pt++)
{
total = total + *pt;
}
return total;
}
int A[Size] = {0,1,2,3,4,5,6,7} ;
int sum = sum_arr(A,A+8);
パラメータとして2 D配列
1次元配列と同様に、2つの宣言方法がありますが、違いは列数を書かなければならないことです.1つ目:
int sum(int A[ ][ 4] , int size) // int sum(int A[ ][ ] , int size), ,size
1つ目:
int sum(int (*A)[ 4] , int size) // , ,size , * 。
使用方法は同じです.
sum(A,4)
です.注意:同様に、どの宣言方式でも、関数の内部で入力された配列を変更すると、その配列自体の値も変更され、参照に似ています.これは、前述した入力がアドレスであり、アドレス上の要素を直接変更するためです.
例:マトリクスの回転を2 D配列で実現するには:
#include
using namespace std;
const int hangshu = 2;
const int lieshu = 4;
void zhuanzhi(int A[][lieshu],int B[][hangshu],int B_hangshu)
{
for(int i = 0 ; i < B_hangshu ; i++)
{
for(int j = 0 ; j < 2 ; j++)
B[i][j] = A[j][i];
}
}
void show(int A[][lieshu],int hangshu,int lieshu)
{
int i,j;
for(i=0;i> A[i][j];
}
int main()
{
int A[hangshu][lieshu];//2*4
int B[lieshu][hangshu];//4*2
input(A,2,4);
show(A,2,4);
zhuanzhi(A,B,4);
show2(B,4,2);
return 0;
}
/****************************************************
int sum_arr(const int *begin,const int *end)
{
const int *pt;
int total = 0;
for(pt = begin ; pt != end ; pt++)
{
total = total + *pt;
}
return total;
}
int A[Size] = {0,1,2,3,4,5,6,7} ;
int sum = sum_arr(A,A+8);
***************************************************/
また、このプログラムは一つのクラスに書けるといいです.