一、结构指针变量做函数的参数
/*
用指针变量作函数参数进行传送,这时由实参传向形参的只是地址,从而减少了时间和空间的开销。
*/
/*
计算一组学生的平均成绩和不及格的人数,用结构指针变量作函数参数编程。
*/
#include<stdio.h>
struct stu
{
int num;
char name[8];
char sex;
float score;
}boy[5] = {
{101,"shi",'w',65},
{102,"wen",'m',89},
{103,"jie",'w',86},
{104,"jie jie",'m',70},
{105,"hi",'m',76},
};
int main(int argc,char **argv)
{
struct stu *ps;
void ave(struct stu *ps);
ps = boy;
ave(ps);
return 0;
}
void ave(struct stu *ps)
{
int c=0;
int i;
float ave;
float s;
for(i=0;i<5;i++,ps++)
{
s += ps->score;
if(ps->score < 60)
{
c += 1;
}
}
printf("s=%f\n",s);
ave = s/5;
printf("average=%f\ncount=%d\n",ave,c);
}
二、结构作为函数的参数
您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量:
#include <stdio.h>
#include <string.h>
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
/* 函数声明 */
void printBook( struct Books book );
int main( )
{
struct Books Book1; /* 声明 Book1,类型为 Books */
struct Books Book2; /* 声明 Book2,类型为 Books */
/* Book1 详述 */
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
/* Book2 详述 */
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
/* 输出 Book1 信息 */
printBook( Book1 );
/* 输出 Book2 信息 */
printBook( Book2 );
return 0;
}
void printBook( struct Books book )
{
printf( "Book title : %s\n", book.title);
printf( "Book author : %s\n", book.author);
printf( "Book subject : %s\n", book.subject);
printf( "Book book_id : %d\n", book.book_id);
}
三、结构体的指针变量 中可以存储 结构变量地址
您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:
struct Books *struct_pointer;
您可以定义指向结构的变量,如下所示:
struct Books Book1;
现在,您可以在上述定义的指针变量中存储结构变量的地址,为了查找结构变量的地址,请把&运算符放在结构名称的前面,如下所示:
struct_pointer = &Book1;
********让我们使用结构指针来重写上面(二中)的实例,这将有助于您理解结构指针的概念:
#include <stdio.h>
#include <string.h>
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
/* 函数声明 */
void printBook( struct Books *book );
int main( )
{
struct Books Book1; /* 声明 Book1,类型为 Books */
struct Books Book2; /* 声明 Book2,类型为 Books */
/* Book1 详述 */
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
/* Book2 详述 */
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
/* 通过传 Book1 的地址来输出 Book1 信息 */
printBook( &Book1 );
/* 通过传 Book2 的地址来输出 Book2 信息 */
printBook( &Book2 );
return 0;
}
void printBook( struct Books *book )
{
printf( "Book title : %s\n", book->title);
printf( "Book author : %s\n", book->author);
printf( "Book subject : %s\n", book->subject);
printf( "Book book_id : %d\n", book->book_id);
}
版权声明:本文为weixin_42167759原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。