2010-06-04 21 views
8

Ho trovato questo codice di esempio e ho provato a google cosa potrebbe rappresentare lo (int (*)[])var1, ma non ho ottenuto risultati utili.Cosa significa (int (*) []) var1?

#include <unistd.h> 
#include <stdlib.h> 

int i(int n,int m,int var1[n][m]) { 
    return var1[0][0]; 
} 

int example() { 
    int *var1 = malloc(100); 
    return i(10,10,(int (*)[])var1); 
} 

Normalmente io lavoro con i VLA in C99 quindi mi sono abituato a:

#include <unistd.h> 
#include <stdlib.h> 

int i(int n,int m,int var1[n][m]) { 
    return var1[0][0]; 
} 

int example() { 
    int var1[10][10]; 
    return i(10,10,var1); 
} 

Grazie!

risposta

11
+3

ottimo sito di riferimento! – xtofl

+0

Stavo per suggerire lo strumento 'cdecl', bello vedere un front-end Web per questo :) – crazyscot

+1

Sono confuso - non esiste un tipo" array di int ". I tipi di matrice devono avere una dimensione, anche se è variabile. Questo tipo di cast è veramente valido? Se è così, cosa significa? Cosa è 'sizeof * (int (*) []) 0'? –

0

(int (*)[]) è un puntatore a un array di int s. Equivalente all'argomento della funzione int[n][m].

Questo è un linguaggio comune in C: prima fare un malloc per prenotare la memoria, quindi lanciarlo nel tipo desiderato.

+0

Penso che dovresti riformulare la tua risposta, perché 'int [] []' non è una sintassi C valida e non è chiaro cosa intendi. – Jens

+0

E perché vorresti esprimere il ritorno da malloc? È un puntatore al nulla, che può essere assegnato a qualsiasi tipo di puntatore senza un cast in C. (In C++ non si usa malloc in primo luogo, ma 'new'). – Jens

+0

@Jens: Avrei dovuto semplicemente stare zitto :) Non sono un guru del C, quindi potevo solo interpretare il significato del codice, non vedere cosa avrebbe dovuto leggere. – xtofl

1

È un typecast a un puntatore che punta a un array di int.