una resueltos recorrer pasar multidimensional matriz jagged funcion examples ejercicios dinamica como bidimensional arreglos arreglo array c arrays reference multidimensional-array

resueltos - C-Pase por matriz multidimensional de referencia con tamaño conocido



multidimensional array c# examples (2)

En principal:

char *myData[500][9]; //dynamic rows?? char **tableData[500]={NULL}; //dynamic rows?? int r; newCallBack(db, &myData, &tableData, &r);

y pasar a la función por:

void newCallBack(sqlite3 *db, char** mdat, char*** tdat, int* r ) {

No parece gustar esto? ¿Alguna sugerencia? Muchos ejemplos en línea cuando no conoces el tamaño, probándolos en este momento ...

Gracias.


En primer lugar, el problema con myData es que es del tipo incorrecto. char * [] [] requeriría un prototipo char *** (una matriz bidimensional de cadenas) en la función que está llamando. La función quiere una lista de cadenas, que es char * [], o alternativamente char [] [], si no le importa limitar el tamaño de las cadenas.

Para obtener tamaños de matriz completamente dinámicos, tendrá que asignar (y liberar) memoria manualmente con malloc () y free (), y cambiar los tipos de sus variables a char ** myData y char *** tableData.


Si tuviera que volver a escribir esto como tal:

#define NUM_ROWS 500; #define NUM_COLS 9; char **myData = NULL; char *tableData = NULL; int i; int r; myData = malloc(sizeof(char *) * NUM_ROWS); if (!myData) return; /*bad return from malloc*/ tableData = malloc(sizeof(char) * NUM_ROWS); if (!tableData) return; /*bad return from malloc*/ for (i = 0; i < NUM_ROWS; i++) { myData[i] = malloc(sizeof(char) * NUM_COLS); if (!myData[i]) return; /*bad return from malloc*/ }

A continuación, puede llamar a newCallBack () de esta manera si solo desea acceder a los datos ( myData , tableData yr ):

/*prototype*/ void newCallBack(sqlite3 *db, char** mdat, char* tdat, int r); /*call*/ newCallBack(db, myData, tableData, r);

O esto, si quieres poder modificar a qué vars myData y tableData apuntan y el valor de r :

/*prototype*/ void newCallBack(sqlite3 *db, char ***mdat, char **tdat, int *r); /*call*/ newCallBack(db, &myData, &tableData, &r);