我一直在使用带有指针偏移表示法的指针和数组(我认为)进行类项目程序。下面是用于项目的图表
项目提示
*阴影框代表指针。无阴影框表示动态分配的二维 int 数组。您的程序无法为任何未命名的项目创建命名标识符。行数和列数将由用户输入。图中的椭圆表示行和列的大小是可变的。垂直数组是一个指针数组。每个垂直数组元素都指向一个一维整数数组。
在您的程序中,仅通过 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。任何帮助表示赞赏。