黑马程序员—C学习笔记—结构体变量五种定义方式与指针结构体数组探究

———–Java培训、Android培训、IOS培训、.Net培训、期待与您交流!————

本节是个人学习过程中的笔记,供初学者一起学习,欢迎大家批评指正,留言参与讨论,谢谢。
本节涉及到结构体变量五种定义方式与指针结构体数组探究,涉及很多细节,详细变化请参考代码,谢谢。

#include <stdio.h>


struct Date
{
    int year;
    int month;
    int day;
};

struct Student
{
    int no;
    int age;
    float height;
    char* name;

    struct Date birthday;
    struct Date enterSchoolDay;
};

void testDate()
{
    struct Date today={2015,3,26};
    printf("%d\n",today.year);
}

int main()
{
    testDate();

    //定义一个结构体变量三种方式,第一种,定义结构体类型与变量分离
    struct Student me = {1,20,1.78,"Lion",{1989,8,14},{2007,9,1}};
    //第二种,定义结构体类型同时进行
    struct Test
    {
        int test;
    }t1;
    //第三种,定义结构体类型与变量分离,但是匿名定义类型,这样这个结构体只能使用一次
    struct{
        int test;
    }t2;

    //第四种,定义结构体类型与变量同时定义,但是匿名定义类型,这样这个结构体只能使用一次
    struct{
        int test;
    }t3={12};

    //第五种,定义结构体类型与变量同时定义。
    struct Test2{
        int test;
    }t4={12};

    t1.test=10;
    t2.test=11;
    t4.test=13;

    printf("%s\n",me.name);
    printf("%d\n",t1.test);
    printf("%d\n",t2.test);
    printf("%d\n",t3.test);
    printf("%d\n",t4.test);

//    struct Student* p;
//    p = &me;
    struct Student* p = &me;
    //*p = me; 这种赋值方式错误

    printf("%s\n",(*p).name);
    printf("%s\n",p->name);

    //定义一个全局嵌套结构体
    struct Student students[] ={  //students[] 里面的[]必不可少
        {1,20,1.78,"Tiger",{1989,8,14},{2007,9,1}},
        {2,18,1.68,"Pander",{1990,7,14},{2007,9,1}}
    };

    printf("%s,%d\n",students[1].name,students[1].birthday.year);

//    struct Student* sp[] ={  //
//        {1,20,1.78,"Tiger",{1989,8,14},{2007,9,1}},
//        {2,18,1.68,"Pander",{1990,7,14},{2007,9,1}}
//    };
    //printf("%s,%d\n",(*(sp[0])).name,(*(sp[0])).birthday.year);
    //还是报错,不知道指针类型结构体数组,该如何遍历

    struct Student* sp[] = {&students[0],&students[1]};
    sp[0] = &(me);
    sp[1] = &(students[1]);

//    struct Student* sp1[] ={  //
//        &(struct Student {1,20,1.78,"Monkey",{1989,8,14},{2007,9,1}}n1),
//        &(struct Student {2,18,1.68,"Dog",{1990,7,14},{2007,9,1}}n2)
//    };
//难以实现 因为&students[0]与&{1,20,1.78,"Tiger",{1989,8,14},{2007,9,1}}是有所差异的。

//
    printf("%s,%d\n",(*(sp[0])).name,(*(sp[0])).birthday.year);

    //printf("%s,%d\n",(*(sp1[0])).name,(*(sp1[0])).birthday.year);

}

运行结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值