8.2结构体与函数

 结构体:

        指向结构变量和结构数组的指针

                结构指针的计算以整个结构的大小为单位

        访问结构的成员

                通过结构变量访问其成员,用成员访问运算符“ . ”

                通过结构指针访问其目标的成员,用间接成员访问运算符 “ -> ”

        如果函数的参数是结构类型,那么形参只是实参的拷贝,在函数内部无法修改实参的成员

        如果函数的参数是结构指针,并接受实参的地址,那么就可以在函数内部修改实参的成员

//结构体和函数的关系:作为函数的形参和返回值
//切记:将来函数操作结构体,函数的形参一定是指针
#include <stdio.h>
//声明结构体
typedef struct student {
    char name[32];
    int age;
}stu_t;
void show(stu_t st) { //st=stu
    printf("%s, %d\n", st.name, st.age);
}
void grow(stu_t st) { //st=stu
    st.age++; //操作的是形参变量st.age成员,没有修改实参变量stu.age成员
}
void show_p(stu_t *pstu) { //pstu = &stu
    printf("%s, %d\n", pstu->name, pstu->age); 
}
void grow_p(stu_t *pstu) { //pstu=&stu
    pstu->age++; //通过pstu直接修改实参变量stu.age成员
}
stu_t get_student_info(void) {
    stu_t stu = {"小白", 17};
    return stu; //返回局部结构体变量stu的值
}
stu_t *get_student_info_p(void) {
    //stu_t stu = {"大瓜", 16};
    static stu_t stu = {"大瓜", 16};
    return &stu; //返回局部结构体变量stu的地址,不允许
}
int main(void) {
    stu_t stu = {"张少", 18};
    show(stu);//传递结构体变量stu的值给show函数
    grow(stu);//传递结构体变量stu的值给grow函数
    show(stu);//传递结构体变量stu的值给show函数
    show_p(&stu);//传递结构体变量stu的地址给show_p函数
    grow_p(&stu);//传递结构体变量stu的地址给grow_p函数
    show_p(&stu);//传递结构体变量stu的地址给show_p函数
    stu_t stu1 = get_student_info();//用stu1保存函数返回的结构体值
    printf("%s, %d\n", stu1.name, stu1.age);
    stu_t *pstu = get_student_info_p();//用pstu保存函数返回的地址
    printf("%s, %d\n", pstu->name, pstu->age);
    return 0;
}

        若定义的结构体指针函数中记录的数据用局部变量保存,则返回指针是局部变量,不允许,会报错,但若是返回静态变量则可以,这是生命周期的原因。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值