C Problem bei Arrayübergabe als Parameter

monsterhaus

Cadet 4th Year
Dabei seit
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:)
 

Hancock

Captain
Dabei seit
Nov. 2007
Beiträge
3.773
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 ;).
 

bu1137

Captain
Dabei seit
Apr. 2010
Beiträge
3.249
int a[] IST schlussendlich ein pointer, also dasselbe wie int *a; daher wirst du auch die grösse vom pointer kriegen, per sizeof.
 

monsterhaus

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2009
Beiträge
94
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)?
 

monsterhaus

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2009
Beiträge
94
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!
 
Top