Woher weiß der Compiler wie "Breit" das Array ist?
-
#include <iostream> using namespace std; void foo(char** bar) { for (int y = 0; y < 10; y++) { for (int x = 0; x < 10; x++) { // woher weiß der Compiler wie "Breit" das Array ist? bar[x][y] = x+y*10; } } } int main() { char **array = new char*[10]; for(int i = 0; i < 10; i++) { array[i] = new char[10]; } foo(array); }
-
Das weiß der Compiler gar nicht! Wenn du eine Speicherstelle außerhalb des Arrays mit den Indizes ansprichst, dann gibts einen sogennanten Segmention fault
Um so etwas vorzubeugen ist der Programmierer da. Hifreich könnte in diesem Fall std::vector sein, da die at() Methode eine Bereichsprüfung vornimmt.
-
Wie schon gesagt kann er es garnicht. Du musst entweder die Dimensionen mit übergeben, oder char (*bar)[10], char bar[10][10], char bar[][10] bzw. gleich vector< vector<char> > benutzen.
-
Falls die Frage damit noch nicht beantwortet ist: Er muss es nicht wissen, weil du kein zweidimensionales Array vorliegen hast.