名前:2次元配列のいくつかの表現方法
注:次の2次元配列表現方法が一般的に使用されます。
1つ目は、通常の2次元配列の表現です。
2つ目は、1次元配列を使用して2次元配列を表すことです。表示された要素アドレスから、2次元配列と1次元配列で表される2次元配列の格納方法がわかります。メモリ内の配列は実際には同じですが、2次元配列が使用されます。アドレス変換がない限り、配列はより単純に見えます。
3番目の表現は、ポインターの配列を使用することです。この例のc [i]の要素は、実際にはアドレスです。この方法は、各要素のサイズが異なる場合に適しています。例:処理する必要のある長さが等しくない文字列が複数あるとします。[i] [j]構造を使用する場合、jはこれらの文字列の最大長を取る必要があります。明らかに、この方法ではスペースが無駄になります。
* a [i]構造を採用すると、文字列自体ではなく、各文字列の最初のアドレスのみがaに格納されるため、スペースが節約されるだけでなく、文字列を直接操作する時間が短縮されます。
4番目の方法は、ポインター間変数を使用して表すことです。このように、pはポインタへのポインタであり、通常の2次元配列(この例ではaなど)の最初のアドレスをそれに割り当てることはできません。(aはポインターへのポインターではないため)。3番目のメソッドの配列ポインタの最初のアドレスを割り当てることができます。この方法はあまり使用されていません。
#include<iostream>
using namespace std;
int main()
{
int a[3][3] = {
{0,1,2},{3,4,5},{6,7,8}};
int b[9] = {0,1,2,3,4,5,6,7,8};
int *c[3];
int **p;
cout<<"普通二维数组表示"<<endl;
for(int i = 0;i<3;++i)
{
for(int j = 0;j<3;++j)
{
cout<<a[i][j]<<"("<<&a[i][j]<<")"<<" "; //括号里是对应元素的地址
//cout<<*(*(a+i)+j)<<" ";
}
cout<<endl;
}
cout<<"普通一维数组表示"<<endl;
for(int i = 0;i<3;++i)
{
for(int j = 0;j<3;++j)
{
cout<<b[i*3+j]<<"("<<&b[i*3+j]<<")"<<" ";
}
cout<<endl;
}
cout<<"指针数组表示:"<<endl;
for(int i = 0;i<3;++i)
{
c[i] = *(a+i); //c[i]指向a数组的第i行首地址
for(int j = 0;j<3;++j)
{
cout<<c[i][j]<<"("<<&c[i][j]<<")"<<" ";
}
cout<<endl;
}
cout<<"指针变量表示"<<endl;
p = c; //p为指向指针的指针,将指针数组c赋给指针变量p
for(int i = 0;i<3;++i)
{
for(int j = 0;j<3;++j)
{
cout<<p[i][j]<<"("<<&p[i][j]<<")"<<" ";
}
cout<<endl;
}
return 0;
}
さらに、プログラミング能力を向上させたい場合は、C言語とC ++プログラミングを学んでください。カーブで追い越し、一歩速く!ここでお手伝いできるかもしれません〜
UPは、C / C ++プログラミングの学習に関するビデオチュートリアルをホームページにアップロードしています。興味のある方、または学習している方は、ぜひご覧ください。お役に立てれば幸いです〜
共有(ソースコード、実際のプロジェクトビデオ、プロジェクトノート、基本的な入門チュートリアル)
キャリアを変えてプログラミングを学び、自分で考えるよりも多くの情報を使って学び、成長するパートナーを歓迎します。
プログラミング学習:
プログラミング学習: