C Estrutura e Função
Estrutura e função C
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 estruturas 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 <stdio.h>
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 \n is entered
// \n is discarded
scanf("%[^\n]%*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("\nDisplaying information\n");
printf("Name: %s", s.name);
printf("\nAge: %d", s.age);
}
Saída
Enter name: Bond Enter age: 13 Displaying information Name: Bond Age: 13
Aqui, uma variável struct s1 do tipo
struct student
é criado. A variável é passada para o display()
função usando display(s1);
declaração. Retorna a estrutura de uma função
Veja como você pode retornar a estrutura de uma função:
#include <stdio.h>
struct student
{
char name[50];
int age;
};
// function prototype
struct student getInformation();
int main()
{
struct student s;
s = getInformation();
printf("\nDisplaying information\n");
printf("Name: %s", s.name);
printf("\nRoll: %d", s.age);
return 0;
}
struct student getInformation()
{
struct student s1;
printf("Enter name: ");
scanf ("%[^\n]%*c", s1.name);
printf("Enter age: ");
scanf("%d", &s1.age);
return s1;
}
Aqui, o
getInformation()
função é chamada usando s = getInformation();
declaração. A função retorna uma estrutura do tipo struct student
. A estrutura retornada é exibida a partir do main()
função. Observe que, o tipo de retorno de
getInformation()
também é struct student
. Passando struct por referência
Você também pode passar structs por referência (de maneira semelhante, como você passa variáveis do tipo interno por referência). Sugerimos que você leia o tutorial de 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 <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("For first number,\n");
printf("Enter real part: ");
scanf("%f", &c1.real);
printf("Enter imaginary part: ");
scanf("%f", &c1.imag);
printf("For second number, \n");
printf("Enter real part: ");
scanf("%f", &c2.real);
printf("Enter imaginary part: ");
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;
}
Saída
For first number, Enter real part: 1.1 Enter imaginary part: -2.4 For second number, Enter real part: 3.4 Enter imaginary part: -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 de resultado é passado para o
addNumbers()
função. Aqui, resultado é passado por referência. Quando o resultado variável dentro do
addNumbers()
for alterado, o resultado variável dentro do main()
função também é alterada em conformidade. Linguagem C