Neste tutorial, você aprenderá a passar variáveis de estrutura como argumentos para uma função. Você aprenderá a retornar struct de uma função com a ajuda de exemplos.
Semelhante a variáveis de tipos internos, você também pode passar variáveis de estrutura para uma função.
Passando structs para funções
Recomendamos que você aprenda esses tutoriais antes de aprender como passar estruturas para funções.
- Estruturas C
- Funções C
- Função definida pelo usuário
Veja como você pode passar estruturas para uma função
#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); )
Resultado
Digite o nome: Bond Digite a idade: 13 Exibindo informações Nome: Bond Idade: 13
Aqui, uma variável de estrutura s1 do tipo struct student
é criada. A variável é passada para a display()
função usando a display(s1);
instrução.
Retornar estrutura de uma função
Veja como você pode retornar a estrutura de uma função:
#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; )
Aqui, a getInformation()
função é chamada usando a s = getInformation();
instrução. A função retorna uma estrutura do tipo struct student
. A estrutura retornada é exibida a partir da main()
função.
Observe que o tipo de retorno de getInformation()
também é struct student
.
Passando estrutura por referência
Você também pode passar estruturas por referência (da mesma forma como passa variáveis do tipo integrado por referência). Sugerimos que você leia o tutorial passagem por referência antes de prosseguir.
Durante a passagem por referência, os endereços de memória das variáveis de estrutura são passados para a função.
#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; )
Resultado
Para o primeiro número, insira a parte real: 1.1 Insira a parte imaginária: -2,4 Para o segundo número, insira a parte real: 3.4 Insira a parte imaginária: -3,2 result.real = 4,5 result.imag = -5,6
No programa acima, três variáveis de estrutura c1, c2 e o endereço do resultado são passados para a addNumbers()
função. Aqui, o resultado é passado por referência.
Quando a variável de resultado dentro de addNumbers()
é alterada, a variável de resultado dentro da main()
função também é alterada de acordo.