Étant donné que le nom d'un tableau est en fait un pointeur vers le premier élément d'un tableau, le code suivant:Différence entre le pointeur sur le pointeur et le pointeur sur le tableau?
#include <stdio.h>
int main(void)
{
int a[3] = {0, 1, 2};
int *p;
p = a;
printf("%d\n", p[1]);
return 0;
}
impressions 1
, comme prévu.
Maintenant, étant donné que je peux créer un pointeur qui pointe vers un pointeur, j'écrit ce qui suit:
#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;
}
Je m'y attendais compiler et imprimer
p0[1] = 1
(*p1)[1] = 1
(*p2)[1] = 1
Mais au contraire, il va mal à la compilation, en disant:
test.c: In function ‘main’:
test.c:11:5: warning: assignment from incompatible pointer type [enabled by default]
Pourquoi cette affectation est-elle erronée? Si p1
est un pointeur vers un pointeur sur un int
et a
est un pointeur vers un int
(parce que c'est le nom d'un tableau de int
s), pourquoi ne puis-je attribuer &a
-p1
?
Il ya quelque temps, j'ai écrit [une réponse à une question similaire] (http://stackoverflow.com/questions/5181237/confusion-in-data-types-in-a-2d-array) que vous pourriez aimer. – pmg
Merci pour l'indice! – jpmelos