Ich verstehe nicht, warum der letzte Code-Schnipsel 2000 und nicht 4000 druckt. Irgendein Anfängerfehler schätze ich. Wissen Sie? Verwenden von DevC++.Dereferenzieren Doppelzeiger
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: Was ich stattdessen ein Zeiger war ** b werden zu einem Array oder Zeiger, aber ich denke, was passiert ist, dass ich gemacht ** b ein Array von Zeigern-to-Zeiger wollte.
in den unten stehenden Antworten sind große Lösungen für den Code in einer Art und Weise zu arbeiten, und hier ist eine Lösung, wie Sie den Code Arbeit zu machen, wie ich ursprünglich gedacht:
alle Warnungen in Ihrem Compiler aktivieren verwenden, und geben Sie Ihren Code kompilieren. Warnungen nicht ignorieren. – dreamlax
Compiler und Debugger sind deine Freunde. Schalten Sie alle Warnungen ein ... (-: – user3078414
Aktivieren Sie Ihre Compilerwarnungen und pedantische Standardkonformität. Fragen Sie nicht Menschen um Rat, dass eine Maschine Ihnen kostenlos geben kann. –