In questo tutorial imparerai a passare le variabili struct come argomenti a una funzione. Imparerai a restituire struct da una funzione con l'aiuto di esempi.
Simile alle variabili dei tipi incorporati, puoi anche passare variabili di struttura a una funzione.
Passaggio di strutture a funzioni
Ti consigliamo di imparare questi tutorial prima di imparare a passare gli struct alle funzioni.
- Strutture C.
- Funzioni C.
- Funzione definita dall'utente
Ecco come passare strutture a una funzione
#include struct student ( char name(50); int age; ); // function prototype void display(struct student s); int main() ( struct student s1; printf("Enter name: "); // read string input from the user until is entered // is discarded scanf("%(^)%*c", s1.name); printf("Enter age: "); scanf("%d", &s1.age); display(s1); // passing struct as an argument return 0; ) void display(struct student s) ( printf("Displaying information"); printf("Name: %s", s.name); printf("Age: %d", s.age); )
Produzione
Immettere il nome: Bond Immettere l'età: 13 Visualizzazione delle informazioni Nome: Bond Età: 13
Qui struct student
viene creata una variabile struct s1 di tipo . La variabile viene passata alla display()
funzione utilizzando l' display(s1);
istruzione.
Restituisce la struttura da una funzione
Ecco come puoi restituire la struttura da una funzione:
#include struct student ( char name(50); int age; ); // function prototype struct student getInformation(); int main() ( struct student s; s = getInformation(); printf("Displaying information"); printf("Name: %s", s.name); printf("Roll: %d", s.age); return 0; ) struct student getInformation() ( struct student s1; printf("Enter name: "); scanf ("%(^)%*c", s1.name); printf("Enter age: "); scanf("%d", &s1.age); return s1; )
Qui, la getInformation()
funzione viene chiamata using s = getInformation();
statement. La funzione restituisce una struttura di tipo struct student
. La struttura restituita viene visualizzata dalla main()
funzione.
Si noti che anche il tipo restituito di getInformation()
è struct student
.
Passaggio di struct per riferimento
Puoi anche passare le strutture per riferimento (in un modo simile come se passassi le variabili di tipo incorporato per riferimento). Ti consigliamo di leggere il tutorial di riferimento prima di procedere.
Durante il passaggio per riferimento, gli indirizzi di memoria delle variabili struct vengono passati alla funzione.
#include typedef struct Complex ( float real; float imag; ) complex; void addNumbers(complex c1, complex c2, complex *result); int main() ( complex c1, c2, result; printf("For first number,"); printf("Enter real part: "); scanf("%f", &c1.real); printf("Enter imaginary part: "); scanf("%f", &c1.imag); printf("For second number, "); printf("Enter real part: "); scanf("%f", &c2.real); printf("Enter imaginary part: "); scanf("%f", &c2.imag); addNumbers(c1, c2, &result); printf("result.real = %.1f", result.real); printf("result.imag = %.1f", result.imag); return 0; ) void addNumbers(complex c1, complex c2, complex *result) ( result->real = c1.real + c2.real; result->imag = c1.imag + c2.imag; )
Produzione
Per il primo numero, inserisci la parte reale: 1.1 Inserisci la parte immaginaria: -2.4 Per il secondo numero, inserisci la parte reale: 3.4 Inserisci la parte immaginaria: -3.2 risultato.real = 4.5 risultato.imag = -5.6
Nel programma precedente, tre variabili di struttura c1, c2 e l'indirizzo del risultato vengono passati alla addNumbers()
funzione. Qui, il risultato viene passato per riferimento.
Quando la variabile di risultato all'interno di addNumbers()
viene modificata, anche la variabile di risultato all'interno della main()
funzione viene modificata di conseguenza.