C语言基础-结构体

结构体类型的声明

结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量

数组:一组相同类型元素的集合

结构体:其实是一组不一定相同类型元素的集合

//结构声明
// struct tag  //tag根据实际情况给名字
// {
//     member-list;   //成员列表(1个或者多个)
// }variable-list;//变量列表

//描述一个学生
//名字+年龄+性别

//声明结构体类型
// struct Stu
// {
//     //成员变量,是用来描述结构体对象的相关属性的
//     char name[20];
//     int age;
//     char sex[5]; //男 女 保密
// }; //s2,s3,s4;//s2,s3,s4就是结构体变量 - 全局变量

// typedef struct Stu   //重命名
// {
//     //成员变量,是用来描述结构体对象的相关属性的
//     char name[20];
//     int age;
//     char sex[5]; //男 女 保密
// } Stu;

// int main()
// {
//     struct Stu s1; //局部变量
//     //Stu s2; //在c语言中,没有对结构体类型typedef,struct关键字不能省略
    

//     return 0;
// }

结构体初始化

//结构成员的类型
struct S
{
    int a;
    char arr[5];
    int* p;
}s1 = {100,"fan",NULL};

//int n = 2023;
// struct S s2 = {98,"111",&n};
struct S s2 = {98,"111",NULL};


struct B
{
    char arr[10];
    struct S s;
    double d;
};


int main()
{
    struct S s3 = {.arr = "aaa", .a = 10, .p = NULL};
    //printf("%d %s %p\n",s1.a,s1.arr,s1.p); //结构成员访问操作符
    //printf("%d %s %p\n",s2.a,s2.arr,s2.p);
    //printf("%d %s %p\n",s3.a,s3.arr,s3.p);
    struct B b = {"hello",{20,"aaa",NULL},3.14};
    printf("%s %d %s %p %lf\n",b.arr, b.s.a, b.s.arr, b.s.p, b.d);
    return 0;
}

结构体成员访问

struct Stu
{
    /* data */
    char name[20];
    int age;
};

// void set_stu(struct Stu* ps)
// {
//     (*ps).age = 20;
//     //t.name = "张三";  //err
//     strcpy((*ps).name,"张三");   //字符串拷贝
// }

void set_stu(struct Stu* ps)
{
    ps->age = 20; //结构体成员访问操作符     结构体指针 -> 结构体成员
    //t.name = "张三";  //err
    strcpy(ps->name,"张三");   //字符串拷贝
}

void printf_stu(struct Stu t)
{
    printf("%s %d\n",t.name,t.age);
}

int main()
{
    struct Stu s = {0};
    set_stu(&s); //传值调用
    printf_stu(s);

    return 0;
}

结构体传参

//结构体传参
struct S
{
    /* data */
    int data[1000];
    int num;
};

struct S s = {{1,2,3,4},1000};
//结构体传参
void print1(struct S s)
{
    printf("%d\n",s.num);
}
//结构体地址传参
void print2(struct S* ps)
{
    printf("%d\n",ps->num);
}

int main()
{
    print1(s); //传结构体
    print2(&s);//传地址

    return 0;
}
//结构体传参,尽量选用结构体地址传参

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值