2010-03-18 15 views

Respuesta

17

Deberá saber qué función realmente espera y modificar la interfaz en consecuencia. Si se espera una matriz bidimensional (char [N][M]) la interfaz correcta sería:

extern int docx(char *,char*[M]); 

que es diferente de:

extern int docx(char*, char**); 

En el primer caso la función estaría esperando un puntero en un bloque contiguo de memoria que contiene N*M caracteres (&p[0][0]+M == &p[1][0] y (void*)&p[0][0]==(void*)&p[0]), mientras que en el segundo caso esperará un puntero en un bloque de memoria que contiene N punteros a bloques de memoria que pueden o no ser contiguos (&p[0][0] y &p[1][0] no están relacionados y p[0]==&p[0][0])

// case 1 
ptr ------> [...M][0123.........M]...[0123.........M] 

// case 2 
ptr ------> 0 [ptr] -------> "abcde" 
      1 [ptr] -------> "another string" 
       ... 
      N [ptr] -------> "last string" 
+0

gracias. usted proporciona un buen material. – ambika

2

char *[M] no es diferente de char **. char *[M] es una matriz de punteros a char. La dimensión no juega ningún papel en C (en este caso). Lo que David quiso decir fue char (*)[M] que es un puntero a una matriz de M chars que sería el tipo correcto para su prototipo, pero su char [][M] también está bien (de hecho, es la formulación más común).

Cuestiones relacionadas