传递结构体变量和结构体指针

# include<stdio.h>

/*struct Test

{ int x;

int y;

}t1,t2;

t1.x=3;

t1.y=4;

t2=t1;

printf("t2.x=%d t1.y=%d",t2.x,t1.y);

return 0;*/

//可以直接赋值,但要类型相同

/* struct Date

{

int year;

int month;

int day;

};

struct Book

{

char title[100];

char author[100];

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) //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\n请录入第一本书信息……\n");

b1=getInput(b1);//b1是实参 实参传递给形参

putchar('\n');

printf("请录入第二本书信息……\n");

b2=getInput(b2);

printf("\n\n信息录入完毕,现在开始打印验证……\n");

printf("打印第一本的信息……");

putchar('\n') ;

printBook(b1);

printf("打印第二本的信息……\n");

printBook(b2);

return 0;

} */

//修改以上代码 传递指向结构体变量的指针 一切为了效率

/*

struct Date

{

int year;

int month;

int day;

};

struct Book

{

char title[100];

char author[100];

float price;

struct Date date;//结构体件套

char publisher[40];

};

void getInput(struct Book *book);//申明好习惯

void printBook(struct Book *book);//申明

void getInput(struct Book *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\n请录入第一本书信息……\n\n");

getInput(&b1);//b1是实参 实参传递给形参 原本是b1=getInput(b1);现在直接传地址

putchar('\n');

printf("请录入第二本书信息……\n\n");

getInput(&b2);

printf("\n\n信息录入完毕,现在开始打印验证……\n");

printf("打印第一本的信息……\n\n");

putchar('\n\n') ;

printBook(&b1); //打印也是扔一个地址进去

printf("打印第二本的信息……\n");

printBook(&b2);

return 0;

}*/

/*请录入第一本书信息……

请输入书名:karry

请输入作者:sky

情输入售价:34

请输入日期:2022-3-24

请输入出版社:sdsfdx

请录入第二本书信息……

请输入书名:hello

请输入作者:sky

情输入售价:56

请输入日期:2022-3-24

请输入出版社:sdsfdx

信息录入完毕,现在开始打印验证……

打印第一本的信息……

书名:karry

作者:sky

售价:34.00

出版日期:2022-3-24

出版社:sdsfdx

打印第二本的信息……

书名:hello

作者:sky

售价:56.00

出版日期:2022-3-24

出版社:sdsfdx

*/

//动态申请结构体 调用malloc 为函数分配存储空间

//so 还可以改进代码 ,直接修改main 函数

# include<stdlib.h> //下面出现exit

struct Date

{

int year;

int month;

int day;

};

struct Book

{

char title[100];

char author[100];

float price;

struct Date date;//结构体件套

char publisher[40];

};

void getInput(struct Book *book);//申明好习惯

void printBook(struct Book *book);//申明

void getInput(struct Book *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;//加了*号

b1=(struct Book*)malloc(sizeof(struct Book)); //molloc 默认返回void 所以要强制类型转换

b2=(struct Book*)malloc(sizeof(struct Book));

if (b1==NULL||b2==NULL)

{printf("内存分配失败!\n");

exit(1);//执行 exit需要一个头文件 # include <stdlib>

}

printf("\n\n请录入第一本书信息……\n\n");

getInput(b1);//b1,b2现在是指针去掉&

putchar('\n');

printf("请录入第二本书信息……\n\n");

getInput(b2);

printf("\n\n信息录入完毕,现在开始打印验证……\n");

printf("打印第一本的信息……\n\n");

putchar('\n\n') ;

printBook(b1); //打印也是扔一个地址进去

printf("打印第二本的信息……\n");

printBook(b2);

free(b1);

free(b2); //最后释放又来有去

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值