Se si desidera accedere particolare elemento o operare sulla matrice, ma se si desidera creare la matrice in modo dinamico, è possibile utilizzare l'uso puntatori per accedere a ciascun elemento passando il dimensioni nella funzione di stampa.
Dal momento che se si dispone di un array multidimensionale definito come int [][]
, quindi x = y[a][b]
è equivalente a x = *((int *)y + a * NUMBER_OF_COLUMNS + b);
controllare questo post per maggiori dettagli: How to use pointer expressions to access elements of a two-dimensional array in C?
Quindi, se si desidera stampare tutta la matrice o accedere a qualsiasi elemento particolare, si può fare come:
#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;
}
uscita per il programma di cui sopra (per 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
fonte
2014-09-19 20:55:44
Potrebbe essere possibile con [modelli variadic] (http://en.cppreference.com/w/cpp/language/parameter_pack). –
Potrebbe essere possibile utilizzare un modello in qualche modo, ma ciò aprirebbe il programma all'errore, soprattutto perché sembra che si stia lavorando con un team. – Cartier
@JoachimPileborg Dipende se la generazione è casuale o predefinita; un modello variad potrebbe funzionare per predefiniti non casuali. – Cartier