C-将结构指针传递给函数
时间:2020-02-23 14:31:58 来源:igfitidea点击:
在本教程中,我们将学习将结构指针传递给C编程语言中的函数。
我们在较早的教程之一中了解了如何将结构传递给函数。
因此,我们将使用该想法将结构指针传递给函数。
创建一个结构
在下面的示例中,正在创建一个"学生"结构。
//student structure
struct student {
char id[15];
char firstname[64];
char lastname[64];
float points;
};
函数声明接受结构指针
以下是接受结构指针的函数声明的语法。
returnType functionName(struct tagName *);
returnType是函数functionName的返回类型。
如果函数不返回任何东西,则将其设置为" void"。
该函数采用结构" tagName"指针。
在下面的示例中,我们正在创建两个函数声明,它们声明了学生结构的地址。
void getDetail(struct student *); void displayDetail(struct student *);
创建一个结构变量数组
现在,我们将通过编写以下代码来创建一个学生结构变量数组。
//student structure variable struct student std[3];
因此,我们创建了一个大小为3的学生结构变量数组,以存储三个学生的详细信息。
我们可以如下表示" std"数组变量。
现在,我们将编写完整的代码,这将帮助我们获取学生数据,然后显示它们。
完整的代码
#include <stdio.h>
//student structure
struct student {
char id[15];
char firstname[64];
char lastname[64];
float points;
};
//function declaration
void getDetail(struct student *);
void displayDetail(struct student *);
int main(void) {
//student structure variable
struct student std[3];
//get student detail
getDetail(std);
//display student detail
displayDetail(std);
return 0;
}
//function definition
void getDetail(struct student *ptr) {
int i;
for (i = 0; i < 3; i++) {
printf("Enter detail of student #%d\n", (i + 1));
printf("Enter ID: ");
scanf("%s", ptr->id);
printf("Enter first name: ");
scanf("%s", ptr->firstname);
printf("Enter last name: ");
scanf("%s", ptr->lastname);
printf("Enter Points: ");
scanf("%f", &ptr->points);
//update pointer to point at next element
//of the array std
ptr++;
}
}
void displayDetail(struct student *ptr) {
int i;
for (i = 0; i < 3; i++) {
printf("\nDetail of student #%d\n", (i + 1));
//display result via ptr variable
printf("\nResult via ptr\n");
printf("ID: %s\n", ptr->id);
printf("First Name: %s\n", ptr->firstname);
printf("Last Name: %s\n", ptr->lastname);
printf("Points: %f\n", ptr->points);
//update pointer to point at next element
//of the array std
ptr++;
}
}
Enter detail of student #1 Enter ID: s01 Enter first name: Enter last name: Enter Points: 8 Enter detail of student #2 Enter ID: s02 Enter first name: John Enter last name: Doe Enter Points: 7 Enter detail of student #3 Enter ID: s03 Enter first name: Jane Enter last name: Doe Enter Points: 9 Detail of student #1 Result via ptr ID: s01 First Name: Last Name: Points: 8.000000 Detail of student #2 Result via ptr ID: s02 First Name: John Last Name: Doe Points: 7.000000 Detail of student #3 Result via ptr ID: s03 First Name: Jane Last Name: Doe Points: 9.000000
我们可以如下表示" std"结构数组变量和函数参数。
注意!在给定的图像中,我们显示了" displayDetail()"函数。
getDetail()函数也将类似。
注意点!
每个std元素占用147个字节的内存,我们可以表示如下。
| 成员 | 数据类型 | 大小 |
|---|---|---|
| id | char | 15个字节 |
| firstname | 字符 | 64字节 |
| lastname | 字符 | 64字节 |
| Points | 浮点数 | 4个字节 |
当我们将std变量作为参数传递给getDetail()和displayDetail()函数时,实际上是在传递变量的地址,即std的起始地址。
然后将" std"的起始地址分配给" ptr"变量,我们将使用它来访问学生结构的成员。

