C语言中的结构体

1.创建结构体的两种方法

#include <stdio.h> 
//struct - 结构体关键字,stu - 结构体标签, struct stu - 结构体类型
//定义一个结构体类型
struct stu {
    //成员变量
    char name[20];
    short age;
    char tel[12];
    char sex[5];
}s1, s2, s3; //s1, s2, s3是三个全局的结构体变量

typedef struct dog {
    //成员变量
    char name[20];
    short age;
    char tel[12];
    char sex[5];
} dog; //此处的 dog 为创建的类型

int main() {
    struct stu s = {"sandy", 20, "15988886666", "男"}; //创建结构体变量,局部变量
    dog d = {"dog", 2, "15988886666", "male"};
    return 0;
}

2.结构体套娃

struct S {
    int a;
    char c;
    char arr[20];
    double d;
};
struct T {
    char ch[10];
    struct S s; //结构体中可以包含结构体
    char *pc;
};
int main() {
    char arr[] = "hello bit\n";
    struct T t = {"hehe", {100, 'w', "hello world!", 3.14}, arr}; //嵌套结构体
    printf("%s\n", t.ch);  //hehe
    printf("%s\n", t.s.arr); //hello world!
    printf("%lf\n", t.s.d); //3.14
    printf("%s\n", t.pc); //hello bit , %s 打印字符串,%p 打印指针地址
    return 0;
}

hehe
hello world!
3.140000
hello bit

2.结构体成员的两种访问方式

2.1.传结构体访问成员变量时会在内存中复制一份临时变量,不推荐使用

例如 tmp.name

2.1.传指针访问成员变量时没有额外的操作

例如 ps->name ,也可以这样访问 (*ps).sex

typedef struct Stu {
    //成员变量
    char name[20];
    short age;
    char tel[12];
    char sex[5];
}Stu;
void show(Stu tmp) {
    printf("name: %s\n", tmp.name);
    printf("age: %d\n", tmp.age);
    printf("tel: %s\n", tmp.tel);
    printf("sex: %s\n", tmp.sex);
}
void show2(Stu* ps) {
    printf("name: %s\n", ps->name);
    printf("age: %d\n", ps->age);
    printf("tel: %s\n", ps->tel);
    printf("sex: %s\n", ps->sex);
    printf("sex: %s\n", (*ps).sex);
}
int main() {
    Stu s = {"sandy", 20, "15951885960", "男"};
    show(s); //传结构体
    show2(&s); //传地址
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值