2012-06-20 10 views
5

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 
} 

risposta

12

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 
} 
3

Niente, Entrambi sono lo stesso. Solo per il nostro scopo convincente.

2

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.

Problemi correlati