English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base linguaggio C

Controllo di flusso linguaggio C

Funzione del linguaggio C

Array del linguaggio C

Puntatore del linguaggio C

Stringa del linguaggio C

Struttura linguaggio C

File linguaggio C

Altri C

Manuale di riferimento del linguaggio C

Struttura e funzione del linguaggio C

In questo tutorial, imparerai a passare una variabile di struttura come parametro a una funzione. Imparerai come restituire una struttura da una funzione con esempi.

Come per le variabili di tipo incorporato, puoi anche passare una variabile di struttura a una funzione.

Passare una struttura a una funzione

Ti consigliamo di studiare questi tutorial prima di imparare come passare una struttura a una funzione.

Questo è il metodo per passare una struttura a una funzione

#include <stdio.h>
struct student {
   char name[50];
   int age;
};
//原型函数
void display(struct student s);
int main() {
   struct student s1;
   printf("Inserisci il nome: ");
    // Legge la stringa inserita dall'utente, fino a \

    // \
 viene scartato
   scanf("%[^\n]%*c", s1.name);
   printf("Inserisci età: ");
   scanf("%d", &s1.age);
   display(s1); // Passa la struttura come parametro
   return 0;
}
void display(struct student s) {
   printf("\nMostra informazioni\n");
   printf("Nome: %s", s.name);
   printf("\nEtà: %d", s.age);
}

Risultato di output

Inserisci nome: Bond
Inserisci età: 13
Mostra informazioni
Nome: Bond
Età: 13

In questo caso, è stato creato il variabile struct student di tipo struct s1. Utilizza display(s1) per passare il variabile a funzione display() dichiarata.

Restituire una struttura da una funzione

Questo è il metodo per restituire una struttura da una funzione:

#include <stdio.h>
struct student
{
    char name[50];
    int age;
};
//原型函数
struct student getInformation();
int main()
{
    struct student s;
    s = getInformation();
    printf("\nMostra informazioni\n");
    printf("Nome: %s", s.name);
    printf("\nMatricola: %d", s.age);
    
    return 0;
}
struct student getInformation(); 
{
  struct student s1;
  printf("Inserisci il nome: ");
  scanf("%[^\n]%*c", s1.name);
  printf("Inserisci età: ");
  scanf("%d", &s1.age);
  
  return s1;
}	

In questo caso, utilizzare s = getInformation() per chiamare la dichiarazione della funzione getInformation(). La funzione restituisce una struttura di tipo struct student. Visualizza la struttura restituita nel main().

Attenzione, il tipo di ritorno di getInformation() è anche struct student.

Trasmissione per riferimento della struttura

Puoi anche trasmettere la struttura per riferimento (come trasmetteresti un tipo di variabile nativo per riferimento). Si consiglia di leggereRiferimentoGuida

Durante la trasmissione per riferimento, l'indirizzo di memoria della variabile di struttura viene trasmesso alla funzione.

#include <stdio.h>
typedef struct Complex
{
    float real;
    float imag;
} complex;
void addNumbers(complex c1, complex c2, complex *result);
int main()
{
    complex c1, c2, result;
    printf("Inserisci il primo numero:\n");
    printf("Inserisci il reale: ");
    scanf("%f", &c1.real);
    printf("Inserisci l'immaginario: ");
    scanf("%f", &c1.imag);
    printf("Inserisci il secondo numero:\n");
    printf("Inserisci il reale: ");
    scanf("%f", &c2.real);
    printf("Inserisci l'immaginario: ");
    scanf("%f", &c2.imag);
    addNumbers(c1, c2, &result);
    printf("\nresult.real = %.1f\n", 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;
}

Risultato di output

Inserisci il primo numero:
Inserisci il reale: 5.8
Inserisci l'immaginario: -3.4
Inserisci il secondo numero:
Inserisci il reale: 9.9
Inserisci l'immaginario: -4.5
result.real = 15.7
result.imag = -7.9

Nell'esempio sopra, gli indirizzi delle tre variabili di struttura c1, c2 e del risultato vengono passati alla funzione addNumbers(). Qui, il risultato viene passato per riferimento.

Quando il variabile di risultato interna di addNumbers() viene modificata, il variabile di risultato interna di main() viene modificato in modo corrispondente.