结构体与函数

将结构体作为参数传递给函数

编写一个通过“按值调用”和“引用调用”函数显示员工详细信息

注意:在这里,我假设你对前面的结构体和函数使用的基础知识已经有所了解。

按结构体值调用

“按结构体值调用” 是指将结构体作为参数输入传递给函数。语法如下:

display_Struct(emp);//函数调用时,直接使用结构体

emp是一个结构体,让我们通过下面的示例来学习如何在函数中使用结构体参数。

#include <stdio.h>
#include<string.h>
/*structure Declaration*/
typedef struct
{
 unsigned char name[20];
 unsigned int empId;
 double  salary;
}empInfo;
 
void display_Struct(empInfo ); //函数原型声明
 
int main() 
{
    empInfo emp={"孙悟空",12345,89999.466};  /*empInfo 是struct的别名*/
    
    display_Struct(emp); /*按值调用*/
  
    return 0;
}
 
/*函数定义,打印结构体成员信息*/
void display_Struct(empInfo empData) 
{ 
    printf("Size of structure empDatais =%lu\n",sizeof(empData));
    
    printf("结构体成员的值是:\n");
    
    printf("empData.name=%s\n",empData.name);
    
    printf("empData.empId=%u\n",empData.empId);
    
    printf("empData.salary=%lf\n",empData.salary);
}

输出结果:

Size of structure empDatais =32
结构体成员的值是:
empData.name=孙悟空
empData.empId=12345
empData.salary=89999.466000

以上的例子中,我们可以看到:
display_Struct是一个带参数的函数,参数"emp"是一个结构体变量。
display_Struct(emp) 传入参数结构体"emp",然后打印emp的成员信息。
empData是一个局部结构体变量,它获取emp结构体的副本然后使用点(.)运算符输出显示。

按结构体引用调用

“按结构引用调用” 是指将结构地址作为输入参数给函数。语法如下:

display_Struct(&emp); //引用调用方式调用函数

emp是一个结构体,让我们通过下面的示例来学习如何在通过引用调用函数的方式使用结构体参数。

#include <stdio.h>
#include<string.h>
/*结构体声明*/
typedef struct
{
    unsigned char name[20];
    unsigned int empId;
    double  salary;
}empInfo;
 
void display_Struct(empInfo* ); //函数原型声明
 
int main() 
{
    empInfo emp={"孙悟空",12345,89999.466};  /*empInfo是struct的别名*/
    
    display_Struct(&emp); /*引用调用函数*/
 
    return 0;
}
 
/*函数定义,打印结构体成员信息*/
void display_Struct(empInfo *empData) 
{ 
    printf("Size of structure empData is =%lu\n",sizeof(empData));
    
    printf("结构体成员的值是:\n");
    
    printf("empData->name=%s\n",empData->name);
    
    printf("empData->empId=%u\n",empData->empId);
    
    printf("empData->salary=%lf\n",empData->salary);
}

输出结果:

Size of structure empData is =8
结构体成员的值是:
empData->name=John
empData->empId=12345
empData->salary=89999.466000

以上的例子中,我们可以看到:
display_Struct是一个带参数的函数,参数"&emp"是一个结构体指针变量。
display_Struct(&emp) 传入参数结构体"emp"的地址,然后打印emp的成员信息。
empData是一个局部结构体变量指针,它保存emp结构的地址并通过(->)运算符打印其所有信息。

将结构体数组作为参数传递给函数

如果是结构体数组,建议使用“引用调用”函数的方式进行操作。示例如下:

#include <stdio.h>
#include<string.h>
typedef struct 
{ 
    unsigned char name[20]; 
    unsigned int empId; 
    double salary; 
}empInfo; 
 
void display_Struct(empInfo * ); //函数原型声明
 
int main() 
{
     empInfo emp[3]=
    {
        {"孙悟空",3800209,80000},
        {"猪八戒",3800215,70000},
        {"沙和尚",3800218,60000}
    };
 
     display_Struct(emp);
 
    return 0;
}
 
void display_Struct(empInfo *empData) 
{ 
    int i=0;
    
    for(i=0;i<3;i++)
    {
        printf("姓名=%s\t",(empData+i)->name);
        printf("工号=%u\t",(empData+i)->empId);
        printf("薪资=%lf\n",(empData+i)->salary);
    }
}

输出结果:
姓名=孙悟空 工号=3800209 薪资=80000.000000
姓名=猪八戒 工号=3800215 薪资=70000.000000
姓名=沙和尚 工号=3800218 薪资=60000.000000

下一节