C篇 复合类型

C语言除了定义变量使用到的简单类型,如int、char、float、指针,更高级的是将这几种类型进行重定义或者结合使用。分别介绍typedef; struct; union; enum

typeof 别名定义出一种新的类型,可以封装数据类型,方便移植;简化函数指针的定义;
#include <stdio.h>

typedef int de_int;

int main(void)
{
    de_int i = 10;
    printf("%d\n", i);
}

需要注意与define进行区别,define相当于声明,使用可以当作是替换,代码中d1类型是char*,而d2是char

#include <stdio.h>
#define defineType char*
typedef char* typedefType;

int main(void)
{
    defineType d1,d2; // char *d1, d2
    typedefType t1,t2; // char* d1,d2
}

 struct 结构体,不同类型元素集合
  • 结构体类型
// 匿名结构体
struct {
    int age;
    char sex;
} a,b;

// 有名结构体
struct Per {
{
    int age;
    char sex;
};
struct Per a, b;

// typedef 别名结构体
struct Per {
{
    int age;
    char sex;
};
typedef struct Per person;
person a,b;
  • 结构体变量赋值及引用;结构体使用.获取属性值,结构体指针使用->获取
#include <stdio.h>

struct Per {
    int age;
    char sex;
    char name[10];
};

typedef struct Per perdef;

int main(void)
{
    perdef one = {10, 'm', "wang"};
    printf("%s\n", one.name);
    strcpy(one.name, "ligbee");
    printf("%s\n", one.name);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct _per {
    int age;
    char sex;
    char* name;
};


int main(void)
{
    struct _per* one;
    one = (struct _per*)malloc(sizeof(struct _per));
    one->age = 1;
    one->sex = 'm';
    one->name = "hello";
    printf("%s\n", one->name);
    printf("%d\n", one->age);
    free(one);
}
  • 结构体size
    结构体成员地址从低到高分配连续分配,首成员对应低地址;最小整形变量对齐,以4字节为准。
struct Per {
    int age;
    char sex;
};
//占据5字节

struct Per {
    char sex;
    int age;
};
//占据8字节,char本身1字节,因为按4字节对齐,所以移动3字节,再分配int占4字节
  • 结构体赋值
    相同类型结构体变量可以直接赋值,相同类型的数组之间不可以直接赋值

union 共用体,union中可以定义多个成员,使用不同类型的变量占据共同的内存,共用体大小为元素中最大字节量
#include <stdio.h>

union ITEM {
    int one;
    char two;
};

int main(void)
{
    union ITEM a;
    printf("size:%ld\n", sizeof(a));
    a.one = 66;
    printf("one:%d--two:%c\n", a.one, a.two);
    a.two = 'A';
    printf("one:%d--two:%c\n",  a.one, a.two);
    return 0;
}
// size:4
// one:66--two:B
// one:65--two:A

enum 枚举,将变量的值一一列举出来,变量只能在列举的范围内取值;枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量,其值分别为0,1,2...
#include <stdio.h>

enum COLOR {
    RED,BLACK,BLUE,WHITE
};

enum RAND {
    one = 10, two, three
};

enum RANDOM {
    one, two = 10, three
};

int main(void)
{
    enum COLOR item;
    item = BLUE;
    printf("%d\n", item);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值