[C] Passaggio di array 2-dimensionali alle function
Inviato: 11/11/2019, 19:15
Salve, ho dei dubbi riguardo il passaggio di un array 2-dimensionale a una function.
Per l'esame devo scrivere una function che effettui l'operazione C=C+A*B dove A, B e C sono matrici quadrate di dimensione N. La function deve avere la seguente testata:
void matmat(int LDA, int LDB, int LDC, float *A, float *B, float *C, int N)
Il mio dubbio nasce dal fatto che fino ad ora per passare una matrice ad una function ho sempre scritto "float A[][LDA]" nel caso della matrice A e non "*A"
Credo che le due istruzioni siano equivalenti, dal momento che in entrambi i casi viene passato l'indirizzo della prima variabile dell'array in memoria, ma vorrei una conferma. In caso contrario varierebbe qualcosa nell'implementazione della mia function? Mi spiego meglio. Al momento ho scritto:
void matmat(int LDA, int LDB, int LDC, float *A, float *B, float *C, int N){
int i, j, k;
for (i=0, i<N, i++) {
for (j=0, j<N, j++) {
for (k=0, k<N, k++) {
C[i][j]=C[i][j]+A[i][k]*B[k][j];
}}}
}
E' corretto scrivere così oppure è necessario l'uso delle "&"?
Inoltre a cosa serve passare anche le leading dimensions LDA, LDB, LDC se poi non vengono esplicitamente utilizzate nel passaggio delle tre matrici alla function?
Spero di aver spiegato bene i miei dubbi. Grazie in anticipo
Per l'esame devo scrivere una function che effettui l'operazione C=C+A*B dove A, B e C sono matrici quadrate di dimensione N. La function deve avere la seguente testata:
void matmat(int LDA, int LDB, int LDC, float *A, float *B, float *C, int N)
Il mio dubbio nasce dal fatto che fino ad ora per passare una matrice ad una function ho sempre scritto "float A[][LDA]" nel caso della matrice A e non "*A"
Credo che le due istruzioni siano equivalenti, dal momento che in entrambi i casi viene passato l'indirizzo della prima variabile dell'array in memoria, ma vorrei una conferma. In caso contrario varierebbe qualcosa nell'implementazione della mia function? Mi spiego meglio. Al momento ho scritto:
void matmat(int LDA, int LDB, int LDC, float *A, float *B, float *C, int N){
int i, j, k;
for (i=0, i<N, i++) {
for (j=0, j<N, j++) {
for (k=0, k<N, k++) {
C[i][j]=C[i][j]+A[i][k]*B[k][j];
}}}
}
E' corretto scrivere così oppure è necessario l'uso delle "&"?
Inoltre a cosa serve passare anche le leading dimensions LDA, LDB, LDC se poi non vengono esplicitamente utilizzate nel passaggio delle tre matrici alla function?
Spero di aver spiegato bene i miei dubbi. Grazie in anticipo