c语言复杂数据类型

//
//  main.c
//  c结构体
//
//  Created by stevenchang on 9/4/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#include <stdio.h>
/**
 局部变量和全局变量
 结构体
 共用体
 枚举
 */

/**
 全局变量在整个文件内有效,局部变量作用域从定义那行开始,知道方法体结束
同名变量,局部变量会覆盖全局变量
 全局变量的使用:只有当此变量被全文使用时,可以使才用定义全局变量
 */
int a = 10;  //这定义了一个全局变量

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

struct Person {   //结构体类型分配的内存空间为最大元素空间的倍数
    char *name;
    struct Date date;
};


struct Student {   //定义一个结构体类型,此时是不分配内存空间的
    int age;
    float weight;
    char *name;
};

struct Teacher {    //定义一个结构体,并定义一个变量tea
    int age ;
    double height;
    char *name;
} tea;

enum Sex {    //定义了一个枚举类型
    male,
    female
};

union Data {  //定义一个共用体(联合体)
    int a;
    int b;
};

int main(int argc, const char * argv[]) {
    // insert code here...
    int a = 20;    //这里定义了一个局部变量
    printf("%d\n",a);
    
    /**
     结构体:是由多种数据类型组成的一种构造类型。
     在定义结构体类型的时候,是不会分配内存空间的。
     结构体也是存在作用域的,可以放在函数体内,也可以放在文件的开头部分。
     */
    printf("===============================\n");
    struct Student stu = {12,23.4,"steven"}; //当定义一个结构体变量和初始化的时候会分配内存空间
    stu.age = 23;     //通过结构体的点语法,我们可以对结构体中的元素进行赋值
    printf("age=%d, weight=%f, name=%s\n",stu.age, stu.weight, stu.name);
    
    printf("==================================\n");
    struct Teacher tea = {34,45.5,"love"};   //虽然定义了变量但是不能直接使用tea,赋值时格式为struct Teacher tea = ......
    tea.age = 20;
    tea.height = 23.4;
    tea.name = "Maggie";
    printf("age=%d, height=%f, name=%s\n",tea.age, tea.height, tea.name);
    
    /**
     结构体数组
     */
    printf("===============================\n");
    struct Student stud[3] = {
        {1,2.3,"adaf"},
        {2,3.4,"jkljl"},
        {3,4.5,"eqrq"}};    //定义了一个结构体数组用于存放多个结构体
    //遍历结构体数组
    for (int i =  0 ; i < 3; i++) {
        printf("age=%d, weight=%f, name=%s\n",stud[i].age, stud[i].weight, stud[i].name);
    }
    
    /**
     指向结构体的指针
     */
    printf("===============================\n");
    struct Teacher tea1 = {12,1.55,"aafaf"};    //结构体初始化和分配内存空间
    struct Teacher *p = &tea1;    //定义一个结构体指针并初始化
    //输出结构体元素的集中方式
    //1.使用tea1进行输出
    printf("age=%d, height=%.2f, name=%s\n",tea1.age, tea1.height,tea1.name);
    printf("age=%d, height=%.2f, name=%s\n",(*p).age, (*p).height,(*p).name);
    printf("age=%d, height=%.2f, name=%s\n",p->age, p->height,p->name);
    
    /**
     结构体嵌套
     */
    printf("================================\n");
    struct Date date = {2011,12,23};
    struct Person person = {"steven",date};
    printf("year=%d, month=%d, day=%d\n",date.year, date.month,date.day);
    printf("name=%s,year=%d,month=%d,day=%d\n",person.name, person.date.year, person.date.month,person.date.day);
    
    /**
     枚举类型:对于常量值,我们可以使用枚举类型
     */
    printf("===============================\n");
    enum Sex sex;   //定义了一个枚举变量
    sex = male;    //对枚举变量sex进行赋值
    printf("sex=%d\n",sex);  //输出结果为1,枚举类型默认数据从0开始,后面一次增加
    
    /**
     共用体(联合体):分配的内存空间是最大元素的空间
     每次使用只能取其中一个元素
     */
    printf("=============================\n");
    union Data data;
    data.a = 12;
    data.b = 123;
    //输出结果相同,是因为他们使用的是同一块内存空间,因此赋值只能给其中一个赋值
    printf("a = %d, b = %d\n", data.a, data.b);
    
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值