对C语言 结构指针变量做函数的参数 结构作为函数的参数

一、结构指针变量做函数的参数

/*

用指针变量作函数参数进行传送,这时由实参传向形参的只是地址,从而减少了时间和空间的开销。

*/

/*

计算一组学生的平均成绩和不及格的人数,用结构指针变量作函数参数编程。

*/

#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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值