C Struct array aus Main in Funktionen aufrufen

Napfton

Grünschnabel
Hallo!

Ich habe folgendes problem und zwar: ich würde gernen ein in main() deklariertes struct array an eine beliebige funktion mittels call-by-reference übergeben bzw dort verarbeiten, hab aber noch keinen erfolg gehabt geht das überhaupt?

mfg
Napfton
 
Hi.

Ein Array wird immer mit "Call-By-Reference" übergeben, da es im Grunde nur ein Zeiger ist.

Zeig deinen Code.

Gruß
 
Code:
#include <stdio.h>

void moose( struct cows *a ){
	(*a).udder = 5;
}
int main(){
	struct cows {
		float milk;
		int udder;
	} cow, *zcow;
	int *preis, moo;
	printf("Bitte geben sie einen Wert fuer die Milch ein: ");
	zcow = &cow;
	moose(&cow);
	scanf("%f", &((*zcow).milk));
	printf("\n%10.2f\n", cow.milk);	
	return 0;
}

Das mit Zeigern und Arrays hab ich denk ich verstanden deepthroat, danke für den Hinweis!

Wie kann ich jetzt das struct aus main in moose benutzen?
 
hm ne lösung wäre auch wenn du es zb so machst in programmen wobei dies dann kein zeiger wäre...

Code:
void void moose( struct cows (&a)[10] ) //für die 10 muss die größte des arrays rein
{
	a.udder = 5;
}
int main(){
        cows cow[10];
	mosse(cow);
}
das wär zb ne möglichtkeit.
bin mir grad nicht sicher aber man kann glaube statt des & auch ein * in der funktion schreiben dann wäre es halt ein pointer

hoffe mal hat geholfen

MFG Hillkorn
 
Das mit Zeigern und Arrays hab ich denk ich verstanden deepthroat, danke für den Hinweis!
Nee, du hast irgendwas nicht verstanden. Du hast ja gar kein Array in deinem Code... :confused:

Erstmal mußt du das struct deklarieren bevor du es verwendest. D.h. du mußt es vor der Funktion moose deklarieren.

Beispiel:
C:
struct cows { 
  float milk;
  int udder;
};

void moose(struct cows *a) {
  a[4].udder = 5;
}

int main() {
  struct cows cowsArray[10];

  moose(cowsArray);
}
Gruß
 
Wow, sorry für die verpätete Antwort aber hab vergessen das ich hier gefragt hab! Es funktioniert mit deiner Lösung Deepthroat, find ich spitze, danke dir dafür.

ich weiß zwar nicht wieso das geht wenn du die funktion einfach mit dem array aufrufst und nich mit der adresse des arrays aber ich finds spitze das es geht :D
 
ich weiß zwar nicht wieso das geht wenn du die funktion einfach mit dem array aufrufst und nich mit der adresse des arrays aber ich finds spitze das es geht :D
Ein Array ist nichts anderes als ein Zeiger. Es ist nicht möglich die Adresse dieses Zeigers zu ermitteln (sonst könnte man diesen Zeiger "verbiegen" und der Zeiger würde nicht mehr auf das Array zeigen). Der Adress-Operator hat bei Arrays keine Wirkung:
C:
int a[20];
void *b = a, *c = &a;

(b == c) // True!
Gruß
 

Neue Beiträge

Zurück