Wenn Sie bestimmtes Element oder arbeiten auf dem Array zugreifen möchten, aber wenn Sie die Matrix dynamisch erstellen möchten, können Sie verwenden Zeiger für den Zugriff auf jedes Element durch die Verwendung vorbei Abmessungen in der Druckfunktion.
Da, wenn Sie ein mehrdimensionales Array als int [][]
definiert haben, dann x = y[a][b]
entspricht x = *((int *)y + a * NUMBER_OF_COLUMNS + b);
prüfen Diesen Beitrag für weitere Informationen: How to use pointer expressions to access elements of a two-dimensional array in C?
Also, wenn Sie ganze Matrix drucken möchten oder einen Zugriff insbesondere Element können Sie wie tun:
#include <iostream>
using namespace std;
//the function print_2D_matrix receives 4 arguments: pointer to first element
// dimension of array arr, i.e. n x m
// index of the element to be printed, i.e. a and b
void print_2D_matrix(int *arr, int n, int m, int a, int b){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++)
printf("%d ", *(arr + (i * m) + j));
printf("\n");
}
//go to the address just before a row, i.e. (a - 1) * NO_OF_COLUMNS
//then go to the address on b column, i.e. (a - 1) * NO_OF_COLUMNS + b
//since we started from the base address, i.e. first element(arr[0][0]), subtract 1
printf("arr[3][3] = %d\n", *(arr + ((a - 1) * m) + b - 1)); //print arr[a][b]
}
int main() {
int n, m;
cin>>n>>m;
int arr[n][m];
for(int i = 0; i < n; i++) //initialize the matrix
for(int j = 0; j < m; j++)
arr[i][j] = i * j;
print_2D_matrix((int *) arr, n, m, 3, 3);
return 0;
}
Ausgang für obiges Programm (für nxm = 4 x 5):
0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
arr[3][3] = 4
Es könnte mit [Variadic Vorlagen] (http://en.cppreference.com/w/cpp/language/parameter_pack) möglich sein. –
Sie können möglicherweise eine Vorlage in irgendeiner Weise verwenden, aber das würde das Programm zu Fehler öffnen, vor allem weil es so klingt, als ob Sie mit einem Team arbeiten. – Cartier
@JoachimPileborg Es hängt davon ab, ob die Generierung zufällig oder vordefiniert ist. Eine variadische Vorlage würde für vordefinierte nicht zufällig funktionieren. – Cartier