2011-06-03 13 views
6

esto es probablemente una cosa esencialmente trivial, pero algo se me escapa, hasta el momento ..incrementar un vector de punteros en C

char * a3[2];
a3[0] = "abc";
a3[1] = "def";
char ** p;
p = a3;

esto funciona:

printf("%p - \"%s\"\n", p, *(++p));

este no:

printf("%p - \"%s\"\n", a3, *(++a3));

el error que estoy consiguiendo compilación es:

lvalue requiere como mínimo de la subasta operando

lo que estoy haciendo mal, por qué y cuál es la solución para 'a3'?

+0

La variable a3 se declara como una matriz de caracteres, creo que desea declararla como una matriz de punteros, por lo que debe leer char * a3 [2] en lugar de char a3 [2] – David

+0

que fue un error de copiar el código, tiene razón, sí, era una matriz de puntero, gracias por señalarlo – XXL

Respuesta

4

a3 es un puntero constante, no puede incrementarlo. "p", sin embargo, es un puntero genérico al inicio de a3 que puede incrementarse.

+0

esta parece ser la respuesta más precisa, gracias – XXL

4

No se puede asignar a a3, ni lo puede incrementar. El nombre de la matriz es una constante, no se puede cambiar.

c-faq

+0

@XXL La forma en que lo declaró, 'a3' no es un puntero, punto. Probablemente te falte un '*' en tu pregunta también ('char * a3 [2]'?) – cnicutar

+0

faltaba un asterisco debido a un error de pegado, lo que quería escuchar era que "el nombre de la matriz es constante, por lo tanto no se puede modificar", lo cual lo explica bastante bien. no tenía esa parte en su respuesta original, ya que apareció solo después de que haya editado su publicación; es por eso que he hecho una pregunta de seguimiento sobre "por qué". de todos modos, se ha abordado por ahora, gracias – XXL

0

Trate

char *a3Ptr = a3; 
printf("%p - \"%s\"\n", a3, *(++a3Ptr)); 

En C, una matriz de caracteres [] es diferente de char *, aunque se puede utilizar un char * para hacer referencia a la primera ubicación de una matriz de char.

no son ambos "p" y "A3" punteros a punteros?

Sí, pero a3 es constante. No puedes modificarlo.

0

a3 es el nombre de una matriz. Esto al respecto como un puntero constante.

No puede cambiarlo. Puede usar a3 + 1 en lugar de ++a3.

Otro problema es con el uso de "%s" para el argumento *(++a3). Como a3 es una matriz de caracteres, *a3 es un carácter y el especificador de formato adecuado debe ser %c.

+0

a3 es una matriz de char * por lo que la sintaxis debería estar bien ... Lo leí al principio también ... o tal vez fue editado después de que publicaste esto. – Pablitorun

0

No puede incrementar o apuntar ninguna matriz de caracteres a otra cosa después de la creación. Necesita modificar o acceder usando el índice. like a[1]