小甲鱼 P44 传递结构体变量和结构体指针

本文探讨了在C语言中如何直接赋值和通过函数传递结构体变量,包括使用结构体指针进行参数传递的方法,以及动态申请结构体变量的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小甲鱼 P44 传递结构体变量和结构体指针

 

两个结构体变量能够直接赋值

#include <stdio.h>

int main()
{
	struct Test
	{
		int x;
		int y;
	}t1, t2;
	
	t1.x = 3;
	t1.y = 4;
	
	t2 = t1;
	
	printf("t2.x = %d, t2.y = %d\n", t2.x, t2.y);
	
	return 0;
}

 

 

将结构体变量作为参数进行传递

#include <stdio.h>

struct Date
{
	int year;
	int month;
	int day;
};

struct Book
{
	char title[128];
	char author[40];
	float price;
	struct Date date;
	char publisher[40];
};

struct Book getInput(struct Book book);
void printBook(struct Book book);

struct Book getInput(struct Book book)
{
	printf("请输入书名:");
	scanf("%s", book.title);
	printf("请输入作者:");
	scanf("%s", book.author);
	printf("请输入售价:");
	scanf("%f", &book.price);
	printf("请输入出版日期:");
	scanf("%d-%d-%d", &book.date.year, &book.date.month, &book.date.day);
	printf("请输入出版社:");
	scanf("%s", book.publisher);
	
	return book;
}

void printBook(struct Book book)
{
	printf("书名:%s\n", book.title);
	printf("作者:%s\n", book.author);
	printf("售价:%.2f\n", book.price);
	printf("出版日期:%d-%d-%d\n", book.date.year, book.date.month, book.date.day);
	printf("出版社:%s\n", book.publisher);
}

int main()
{
	struct Book b1, b2;
	
	printf("请录入第一本书的信息..\n");
	b1 = getInput(b1);//传入进去是空的结构体变量b1 
	putchar('\n');
	printf("请录入第二本书的信息..\n");
	b2 = getInput(b2);//传入进去是空的结构体变量b1 
	
	printf("\n\n录入完毕,现在开始打印验证...\n\n");
	
	printf("打印第一本书的信息...\n");
	printBook(b1);
	putchar('\n');
	printf("打印第二本书的信息...\n");
	printBook(b2);
	
	return 0;
}

 

 

传递指向结构体变量的指针

#include <stdio.h>

struct Date
{
	int year;
	int month;
	int day;
};

struct Book
{
	char title[128];
	char author[40];
	float price;
	struct Date date;
	char publisher[40];
};

void getInput(struct Book *book);
void printBook(struct Book *book);

void getInput(struct Book *book)
{
	printf("请输入书名:");
	scanf("%s", book->title);
	printf("请输入作者:");
	scanf("%s", book->author);
	printf("请输入售价:");
	scanf("%f", &book->price);
	printf("请输入出版日期:");
	scanf("%d-%d-%d", &book->date.year, &book->date.month, &book->date.day);
	printf("请输入出版社:");
	scanf("%s", book->publisher);
}

void printBook(struct Book *book)
{
	printf("书名:%s\n", book->title);
	printf("作者:%s\n", book->author);
	printf("售价:%.2f\n", book->price);
	printf("出版日期:%d-%d-%d\n", book->date.year, book->date.month, book->date.day);
	printf("出版社:%s\n", book->publisher);
}

int main()
{
	struct Book b1, b2;
	
	printf("请录入第一本书的信息..\n");
	getInput(&b1);//传入进去是空的结构体变量b1 
	putchar('\n');
	printf("请录入第二本书的信息..\n");
	getInput(&b2);//传入进去是空的结构体变量b1 
	
	printf("\n\n录入完毕,现在开始打印验证...\n\n");
	
	printf("打印第一本书的信息...\n");
	printBook(&b1);
	putchar('\n');
	printf("打印第二本书的信息...\n");
	printBook(&b2);
	
	return 0;
}

 

 

动态申请结构体

使用malloc函数为结构体分配存储空间(结构体放在堆里面)

#include <stdio.h>
#include <stdlib.h>

struct Date
{
	int year;
	int month;
	int day;
};

struct Book
{
	char title[128];
	char author[40];
	float price;
	struct Date date;
	char publisher[40];
};

void getInput(struct Book *book);
void printBook(struct Book *book);

void getInput(struct Book *book)
{
	printf("请输入书名:");
	scanf("%s", book->title);
	printf("请输入作者:");
	scanf("%s", book->author);
	printf("请输入售价:");
	scanf("%f", &book->price);
	printf("请输入出版日期:");
	scanf("%d-%d-%d", &book->date.year, &book->date.month, &book->date.day);
	printf("请输入出版社:");
	scanf("%s", book->publisher);
}

void printBook(struct Book *book)
{
	printf("书名:%s\n", book->title);
	printf("作者:%s\n", book->author);
	printf("售价:%.2f\n", book->price);
	printf("出版日期:%d-%d-%d\n", book->date.year, book->date.month, book->date.day);
	printf("出版社:%s\n", book->publisher);
}

int main()
{
	struct Book *b1, *b2;
	
	//结构体申请在堆里面 
	b1 = (struct Book *)malloc(sizeof(struct Book));//malloc返回void * 
	b2 = (struct Book *)malloc(sizeof(struct Book));//malloc返回void * 
	
	if (b1 == NULL || b2 == NULL)
	{
		printf("内存分配失败!\n");
		exit(1);
	}
	
	printf("请录入第一本书的信息..\n");
	getInput(b1);//传入进去是空的结构体变量b1 
	putchar('\n');
	printf("请录入第二本书的信息..\n");
	getInput(b2);//传入进去是空的结构体变量b1 
	
	printf("\n\n录入完毕,现在开始打印验证...\n\n");
	
	printf("打印第一本书的信息...\n");
	printBook(b1);
	putchar('\n');
	printf("打印第二本书的信息...\n");
	printBook(b2);
	
	free(b1);
	free(b2);
	
	return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值