2010-06-04 24 views
8

Encontré este código de ejemplo y traté de googlear lo que (int (*)[])var1 podría representar, pero no obtuve resultados útiles.¿Qué 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 trabajo con el VLA en C99 así que estoy acostumbrado 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); 
} 

Gracias!

Respuesta

11
+3

gran sitio de referencia! – xtofl

+0

Iba a sugerir la herramienta 'cdecl', es agradable ver un front-end web :) – crazyscot

+1

Estoy confundido, no existe el tipo de" matriz de int ". Los tipos de matriz deben tener un tamaño, incluso si es variable. ¿Es este tipo usado en el reparto realmente válido? Si es así, ¿qué significa? ¿Qué es 'sizeof * (int (*) []) 0'? –

0

(int (*)[]) es un puntero a una matriz de int s. Equivalente al argumento de función int[n][m].

Esta es una expresión común en C: primero haga un malloc para reservar memoria y luego vuélvala al tipo deseado.

+0

Creo que debería reformular su respuesta, porque 'int [] []' no es una sintaxis válida de C y no está claro a qué se refiere. – Jens

+0

¿Y por qué arrojarías el retorno de malloc? Es un puntero a vacío, que se puede asignar a cualquier tipo de puntero sin un molde en C. (En C++ no se utiliza malloc en primer lugar, sino 'nuevo'). – Jens

+0

@Jens: Debería haberme callado :) No soy un gurú C, así que solo pude interpretar lo que significaba el código, no ver lo que debería haber leído. – xtofl

1

Es un tipo de transmisión a un puntero que apunta a una matriz de int.