Globale Variable
-
Was meinst du mit Typenbezeichner?
Kannst du bitte ein Beispiel dazu angeben.
-
omg, jetzt seh ich erst, was du da machst!
du kannst die laenge eines arrays nicht aendern. du kannst nur ein neues array erstellen.
wenn du mit malloc() und free() arbeiten wuerdest, waere das natuerlich anders. tust du aber nicht.a[m][n];
bewirkt GARNICHTS. es ist das gleiche wie
12345;
-
Du musst den Speicher dynamisch anfordern. zB so:
#include <stdio.h> #include <stdlib.h> int main(){ int m; int n; printf( "\nBitte Hoehe eingeben: " ); scanf( "%i", &m ); printf( "\nBitte Breite eingeben: " ); scanf( "%i", &n ); printf( "Hoehe: %03i, Breite: %03i", m, n ); int **a = ( int** ) malloc( m * sizeof( int* ) ); for( int i = 0; i < n; ++i ) { a[ i ] = ( int* ) malloc( sizeof( int ) ); } for( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ) { a[ i ][ j ] = 10; } } for( int i = 0; i < m; i++ ) { for( int j = 0; j < n; j++ ) { a[ i ][ j ] += 1; } } for( int i = 0; i < m; i++ ) { for( int j = 0; j < n; j++ ) { printf( "a[ %i ][ %i ] = %i\n", i, j, a[ i ][ j ] ); } } }
Greetz, Swordfish
-
Dank euch erstmal.
Denoch habe ich dann das Problem, dass das Array nicht global ist, was ich aber bräuchte, da ich es in einigen Funktionen benutzen will.
Geht das einfach nicht so wie ich es mir vorstelle? oder könnte man das doch irgendwie hinbekommen??
Gruß
Moke
-
GAST2101 schrieb:
Denoch habe ich dann das Problem, dass das Array nicht global ist, was ich aber bräuchte, da ich es in einigen Funktionen benutzen will.
Mach einfach den Pointer "int **a" global, d.h. außerhalb von main() definieren (und ggf. die Dimensionen m und n).
Wenn Du dann das Array nicht mehr brauchst, solltest Du es mit free() wieder freigeben (entsprechend den malloc()-Aufrufen).
-
Du nimmst die Deklaratio des *int *a aus Swordfish's Lösung einfach aus
der main-Funktion heraus und fertig.
-
[quote="jox"]
GAST2101 schrieb:
(und ggf. die Dimensionen m und n)
Ohh natürlich, das hatte ich vergessen (zu lange Java)
Die Dimensionen müssen natürlich global sein damit du später
überhaupt vernünftig auf das Array zugreifen kannst.
-
Alles klar werde es mal versuchen vielen dank an alle.
Gruß
Moke
-
Der Code von Swordfish:
#include <stdio.h> #include <stdlib.h> int main(){ int m; int n; printf( "\nBitte Hoehe eingeben: " ); // wenn m = 10 scanf( "%i", &m ); // und printf( "\nBitte Breite eingeben: " ); scanf( "%i", &n ); // n = 5 printf( "Hoehe: %03i, Breite: %03i", m, n ); int **a = ( int** ) malloc( m * sizeof( int* ) ); // = 10 int* reseviert for( int i = 0; i < n; ++i ) { a[ i ] = ( int* ) malloc( sizeof( int ) ); // = 5 int reserviert } // Array-Grösse ist aber 10 * 5 = 50 int for( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ) { a[ i ][ j ] = 10; // Zugriffsverletzung ! } } for( int i = 0; i < m; i++ ) { for( int j = 0; j < n; j++ ) { a[ i ][ j ] += 1; } } for( int i = 0; i < m; i++ ) { for( int j = 0; j < n; j++ ) { printf( "a[ %i ][ %i ] = %i\n", i, j, a[ i ][ j ] ); } } }
Speicher für ein 2D-Array in 'ner Schleife allokieren, ist schlecht.
#include <stdio.h> #include <stdlib.h> // global int* mn; int m; int n; int main() { printf( "\nBitte Hoehe eingeben: " ); scanf( "%i", &m ); printf( "\nBitte Breite eingeben: " ); scanf( "%i", &n ); printf( "Hoehe: %03i, Breite: %03i\n\n", m, n ); mn = ( int* ) malloc( m * n * sizeof(int) ); for ( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ) { mn[i*n+j] = j; // mn[i*n+j] Diese Schreibweise für int-2D-Arrays ist hier angezeigt, } // weil die 2.Dimension beim Compilieren nicht bekannt war. } for ( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ) { printf( "mn[%i][%i] = %i\n", i, j, mn[i*n+j]); } } free((void*)mn); }
-
Oh, hab' wohl m und n durcheinander gebracht.
Greetz, Swordfish