C Struct e funzioni

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 studentviene 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.

Articoli interessanti...