Je ne comprends pas pourquoi le dernier extrait de code imprime 2000 et pas 4000. Une erreur débutant je suppose. Savez-vous? En utilisant DevC++.Dereferencing double pointeur
int val1 = 1000;
int val2 = 2000;
int val3[2] = {3000, 4000};
int **b[3];
*(b+0)= &val1;
*(b+1) = &val2;
*(b+2) = &val3;
//Prints 1000
//Prints what the first element of b is pointing at
printf("%d\n",b[0][0]);
printf("%d\n",**(b+0));
//Prints 2000
printf("%d\n", b[1][0]);
printf("%d\n",**(b+1));
//Prints 3000
printf("%d\n", b[2][0]);
printf("%d\n", **(b+2) );
//Should print 4000 i think, but prints 2000, why?
printf("%d\n", b[2][1]);
printf("%d\n", *(*(b+2)+1) );
EDIT: Ce que je voulais était ** b pour être un pointeur sur un tableau ou des pointeurs, mais je suppose que ce qui est arrivé est que je fait ** b un tableau de pointeurs-à-pointeurs au lieu.
Ci-dessous les réponses sont grandes solutions pour que le code fonctionne d'une manière, et voici une solution pour savoir comment faire le travail de code comme je l'ai prévu à l'origine:
Activer tous les avertissements dans votre compilateur, puis compiler votre code. N'ignorez pas les avertissements. – dreamlax
Le compilateur et le débogueur sont vos amis. Activez tous les avertissements ... (-: – user3078414
Activez les avertissements de votre compilateur et la conformité aux normes pédantes.) Ne demandez pas aux humains des conseils qu'une machine peut vous donner gratuitement –