C Problem bei Arrayübergabe als Parameter

monsterhaus

Cadet 4th Year
Registriert
Feb. 2009
Beiträge
94
Hallo,

ich bin gerade dabei, mich ein wenig mit C zu beschäftigen und stoße nun auf ein Problem, auf dessen Lösung ich seit einer Stunde nicht komme, und frage jetzt deshalb mal hier nach:

Ich habe folgenden Code:

Code:
#include <stdio.h>
void printOutArray(int []);

int main(void){
	int a[] = {1, 5, 2, 9, 55, 4, 6, 8, 6}; //Erstelle ein 1D-Array mit 9 Plaetzen
	printf("---Size of array: %i---\n", sizeof(a)/sizeof(int)); //Gebe mir hier "9" aus!
	printOutArray(a); //Uebergebe das Array an die Funktion, die das Array ausgeben soll
	return 0;
}

void printOutArray(int a[]){
	int i; //Zaehlervariable
	printf("--%i--\n", sizeof(a)/sizeof(int)); //Hier sollte das Programm mir auch 9 ausgeben, gibt aber 1 aus, d.h. folgende Schleife wird auch nur ein mal ausgefuehrt
	for(i = 0; i < (sizeof(a)/sizeof(int)); i++)
		printf("%i\n", a[i]);
}

Mein Problem ist jetzt, dass ich es nicht gebacken bekomme, das Array an die Methode printOutArray zu uebergeben, da anscheinend immer nur das erste Fach der Methode bekannt ist.

Ich hoffe, dass mir jemand helfen kann, ist bestimmt nur ein Denkfehler von mir:)
 
Also, der Complier kann nicht wissen, wie groß das zu übergebende Array ist.
Entweder du übergibst explizit die Größe als zweiten Parameter oder du denfinierst die Funktion mit einem konstanten Array (int a[9])...
Arrayübergabe in C ist kompliziert, da konvertier ich das am liebsten in Pointer, ist zwar nicht so schön/sicher, aber ich weiß ja was ich tu ;).
 
int a[] IST schlussendlich ein pointer, also dasselbe wie int *a; daher wirst du auch die grösse vom pointer kriegen, per sizeof.
 
Ahhh!!! Das müsste man wissen, danke sehr!
@Blitzmerker: Wie meinst du das mit den Pointern (weis, was ein Pointer ist, aber der Compiler weis ja trotzdem nicht, wie viel Speicher das Array braucht)?
 
Ok, ich glaube, ich habe es jetzt geblickt:)

Eigentlich ist es klar, das keine Kopie bei den Arrays übergeben wird, sondern ein Pointer auf die Speicheradresse...darauf hätte ich doch kommen können...man...:)

Vielen Dank an euch zwei!
 
Zurück
Oben