Teniendo en cuenta que el nombre de un array es en realidad un puntero al primer elemento de una matriz, el siguiente código:¿Diferencia entre puntero a puntero y puntero a matriz?
#include <stdio.h>
int main(void)
{
int a[3] = {0, 1, 2};
int *p;
p = a;
printf("%d\n", p[1]);
return 0;
}
impresiones 1
, como se esperaba.
Ahora, dado que yo puedo crear un puntero que apunta a un puntero, escribí lo siguiente:
#include <stdio.h>
int main(void)
{
int *p0;
int **p1;
int (*p2)[3];
int a[3] = {0, 1, 2};
p0 = a;
p1 = &a;
p2 = &a;
printf("p0[1] = %d\n(*p1)[1] = %d\n(*p2)[1] = %d\n",
p0[1], (*p1)[1], (*p2)[1]);
return 0;
}
esperaba que compilar e imprimir
p0[1] = 1
(*p1)[1] = 1
(*p2)[1] = 1
Pero en cambio, se va mal en tiempo de compilación, decir:
test.c: In function ‘main’:
test.c:11:5: warning: assignment from incompatible pointer type [enabled by default]
¿Por qué esa asignación es incorrecta? Si p1
es un puntero a un puntero a un int
y a
es un puntero a un int
(porque es el nombre de una serie de int
s), ¿por qué no puedo asignar a &a
p1
?
Hace algún tiempo escribí [una respuesta a una pregunta similar] (http://stackoverflow.com/questions/5181237/confusion-in-data-types-in-a-2d-array) que podría gustarle. – pmg
¡Gracias por la pista! – jpmelos