结构体变量作为函数的参数和返回值


传递结构体变量
结构体变量可以相互赋值么

#include<stdio.h>
int main()
{
struct Test
{
int x;
int y;
}t1,t2;
t1.x=3;
t1.y=4;
t2=t1;
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)//只要是结构体 struct就不能少
{
    printf("input book name:")
    scanf("%s",book.title);
    printf("input writer:")
    scanf("%s",book.author);
    printf("input book.price:");
    scanf("%f",&book.price);
    printf("input book publish date:");
    scanf("%d-%d-%d",&book.date.year,&book.date.month,&book.date.day);
    printf("input publisher");
    scanf("%s",book.publisher);
    return book;
};




int main()
{
    struct Book b1,b2;
    printf("input first book information:\n ");
    b1=getInput(b1);//传入一个空的结构体,返回一个录入之后的结构体
    putchar("\n");
    //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)//只要是结构体 struct就不能少
{
    printf("input book name:")
    scanf("%s",book->title);
    printf("input writer:")
    scanf("%s",book->author);
    printf("input book.price:");
    scanf("%f",&book->price);
    printf("input book publish date:");
    scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
    printf("input publisher");
    scanf("%s",book->publisher);
    //return book;这里不需要返回值 直接通过指针进行了修改
};

void getInput(struct Book *book)//这里声明要变成指向Book结构体的指针 没有返回值 直接通过指针对结构体内容进行修改


int main()
{
    struct Book b1,b2;
    printf("input first book information:\n ");
    getInput(&b1);//传入结构体的地址,用于指针处理
    putchar("\n");
    //b2同理
    return 0;
}
动态申请结构体

使用malloc函数为结构体分配存储空间,这时候结构体就放在了堆里面。

#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)//只要是结构体 struct就不能少
{
    printf("input book name:")
    scanf("%s",book->title);
    printf("input writer:")
    scanf("%s",book->author);
    printf("input book.price:");
    scanf("%f",&book->price);
    printf("input book publish date:");
    scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
    printf("input publisher");
    scanf("%s",book->publisher);
    //return book;这里不需要返回值 直接通过指针进行了修改
};

void getInput(struct Book *book)//这里声明要变成指向Book结构体的指针 


int main()
{
    struct Book *b1,*b2;//这里给两个指针
    b1=(struct Book *)malloc(sizeof(struct Book));
    b2=(struct Book *)malloc(sizeof(struct Book));
    if (b1==NULL)||(b2==NULL)
    {
        printf("mem dis failed!\n");
        exit(1);
    }
    printf("input first book information:\n ");
    getInput(b1);//b1此时已经是一个指针
    putchar("\n");
    free(b1);
    //b2同理
    return 0;
}
构建一个图书馆

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值