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"变量,我们将使用它来访问学生结构的成员。