Qual è la differenza tra le seguenti due definizioni di funzione?
Un array 2D viene passato come parametro.Differenza tra i tipi di parametro
void fun(int a[][3])
{
//do some task
}
void fun(int (*a)[3])
{
//do some task
}
Qual è la differenza tra le seguenti due definizioni di funzione?
Un array 2D viene passato come parametro.Differenza tra i tipi di parametro
void fun(int a[][3])
{
//do some task
}
void fun(int (*a)[3])
{
//do some task
}
Niente, []
è solo zucchero sintattico per un puntatore.
Ecco un semplice banco di prova per dimostrare che non c'è nemmeno una differenza di indicizzazione:
#include <stdio.h>
void fun1(int a[][3]) { printf("%d\n", a[2][2]); }
void fun2(int (*a)[3]){ printf("%d\n", a[2][2]); }
void main() {
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
fun1(a); // prints 9
fun2(a); // prints 9
}
Niente, Entrambi sono lo stesso. Solo per il nostro scopo convincente.
Non c'è differenza tra i due precedenti. In C, quando la notazione dell'array viene utilizzata per un parametro di funzione, viene automaticamente trasformata in una dichiarazione puntatore.