私は、ポインターオフセット表記でポインターと配列を使用してクラスプロジェクトプログラムに取り組んできました(私は思います)。以下は、プロジェクトに使用された図です
プロジェクトのプロンプト
*網掛けのボックスはポインタを表します。影のないボックスは、動的に割り当てられた 2 次元の int 配列を表します。プログラムは、名前のないアイテムの名前付き識別子を作成できません。行数と列数はユーザー入力になります。図の楕円は、行と列のサイズが可変であることを表しています。垂直配列は、ポインターの配列です。垂直配列要素のそれぞれは、整数の 1 次元配列を指します。
プログラムでは、s、t、u、および v で表されるポインターを介してのみ整数配列を参照します。関数に渡すときは、常にこれらのポインターを渡す必要があります。関数呼び出しで実パラメータを逆参照することはできません。また、ポインターを操作するためだけに、ポインターを逆参照して変数に代入することもできません。*
#include <iostream>
using namespace std;
void fillArray(int **pArray, int rows, int columns)
{
for(int row = 0; row < rows; row++)
{
*(pArray + row) = new int;
cout << "Enter " << " row " << row + 1<< endl;
for(int col = 0; col < columns; col++)
{
cin >> *(*(pArray + row) + col);
}
}
}
void printArray(int **pArray, int rows, int columns)
{
for(int row = 0; row < rows; row++)
{
cout << "Row " << row + 1 << endl;
for(int col = 0; col < columns; col++)
{
int num = *(*(pArray + row) + col);
cout << num << " ";
}
cout << endl;
}
}
void reverseArray(int **pArray, int rows, int columns)
{
for(int row = 0; row < rows; row++)
{
cout << "Reversed Row " << row + 1 << endl;
for(int col = columns - 1; col >= 0; col--)
{
int num = *(*(pArray + row) + col);
cout << num << " ";
}
cout << endl;
}
}
int main()
{
int rows;
int columns;
cout << ("Input number of rows: ");
cin >> rows;
cout << ("Input number of columns: ");
cin >> columns;
int **pArray; //Initialize array
int ****s; //Initialize pointers s, t, u, v
**s = pArray;
int ****t;
*t = *s;
int ****u;
**u = pArray;
int ****v;
*v = *u;
pArray = new int*[rows]; //create pointer to rows. 1st level of indirection
*pArray = new int[columns]; //create pointer to columns. 2nd level of indirection
fillArray(pArray, rows, columns);
printArray(pArray, rows, columns);
reverseArray(pArray, rows, columns);
//Loop to terminate program
while (true)
{
cout << "\nEnter letter \'q\' to terminate program\n";
char c;
cin >> c;
if(c == 'q')
break;
}
}
コードのフォーマットが悪くて申し訳ありません。コードブロックでのコピペの仕方がわかりませんでした。
私の質問は、プログラムで図をどのように実装するかです。ポインター オフセットを使用して配列を作成し、独自の名前でラベル付けする基本から始めました。
ポインター変数 's、t、u、v' を使用するには、すべての参照を変更する必要があると思います。どんな助けでも大歓迎です。