从C出发 32 --- 自定义数据类型(上)

 

 字节 指的就是  byte  ,  而一个 byte 占用 8 位,

在 C 语言里面有没有 直接提供 表示 8 位的数据类型?

char 最小的整型,就可以表示 8 位的数据类型

char  的取值范围                  -128 - 127

一个字节的取值范围是         0 - 255

unsigned char    取值范围   0 - 255   正好一个字节的范围

在 C 语言里面如何要使用字节类型,直接就用 unsigned char 就行

从功能上这么做没有问题,但是明明要创建一个字节类型的变量,结果所使用的类型是 unsigned char ,为什么不能使用 一个叫作 byte 的类型来创建变量呐?

我们需要起新名字, 给 unsigned char 起一个新名字,这个新名字叫 byte

其实本质上我们还在使用 unsigned char 只不过说用一个新的名字 byte来表示 unsigned char 这个类型了,

在 C 语言里面有没有什么办法给已有的类型起一个新的名字?

typedef     表面上这个类型的意思是 type define ,类型定义,但是它并没有做类型定义的工作,它做的工作是起新名字,给已有的类型起一个新的名字

typedef 表示的是一个程序设计语句,因此需要一个结束符 ,在 C 语言里面语句的结束都使用 ; 号

 uint8 ==> 无符号整型,并且这个整型占用 8 位

 

 

#include <stdio.h>
#include <string.h>

typedef  unsigned char byte;

void func()
{
    typedef byte uint8;      //在函数内部创建新的类型名是合法的
    uint8 var = 200;
    
    byte b = var;     //虽然这里 uint8 和 byte 是2种不同的类型,但本质上都是 unsigned char的别名,所有这里是同类型变量的初始化

    printf("sizeof(uint8) = %d\n",sizeof(uint8));
    printf("var = %d\n", var);
    printf("b = %d\n", b);
}

int main()
{
    // uint8 var = 1;  // error   因为这个是在别的函数中定义的变量
    byte b = 128;

    func();

    printf("sizeof(byte) = %d\n",sizeof(byte));
    printf("var = %d\n", b);

}

#include <stdio.h>
#include <string.h>

typedef float(FArr5)[5];          //定义数组类型名
typedef int(IFuncII)(int,int);    //定义函数类型名

typedef FArr5*     PFArr5;
typedef IFuncII*   PIFuncII;



float g_arr[5] = {0.1,0.2,0.3};

int add(int a,int b)
{
    return a + b;
}

int main()
{
    FArr5* pa = &g_arr;   // float(*)[5]
    IFuncII* pf = add;    // int(*)(int,int)

    PFArr5    npa = pa;
    PIFuncII  npf = pf;

    int i = 0;

    for(i=0;i<5;i++)
    {
        printf("%f\n",(*pa)[i]);  // * 号 作用于 pa 之后表示的是 pa 所指向的东西
        printf("%f\n",(*npa)[i]);
    }

    printf("%d\n", pf(2,3));
    printf("%d\n", npf(2,3));

    return 0;
    
}

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 



数组的本质是一个有序集合,是相同变量的有序集合

 

在两个 { } 之间定义的变量叫做成员变量,

 

因为使用了 struct ,显然我们要创建一个新类型了,创建的这个新类型就代表 这3 种不同类型变量的集合,

注意: struct 创建的是新类型,那么它是一条合法的语句,所以说需要结束符  ;

这里的  Delphi 初始化第一个成员变量 char name[20];

这里的 908 初始化第二个成员变量 int id .

这里的 1 初始化第三个成员变量 short major;

这里的一 一对应体现了什么?

体现了结构体类型是一个 有序 集合,是一个变量的有序集合

 .  操作符用来访问  结构体类型变量中的成员变量

这个地方定义的  s1 是一个变量,那么这个变量是怎么组成的?

由 3 个部分组成的,一个数组,一个int 类型的变量,一个short 类型的变量,

s1 这个变量类似于一个包,在这个包里面装了3件东西,那么现在我们要分别的访问这 3 件东西,怎么做?

通过 . 操作符

#include <stdio.h>
#include <string.h>


struct Student  //使用struct 关键字来创建一个有序集
{
    char name[20];
    int id;
    short major;

};

int main()
{
    struct Student s1 = {"Delphi", 908, 1};         //使用新类型来创建变量,并且初始化,由于是有序的,所以说要一一对应的初始化

    struct Student s2 = s1;

    printf("s1.name = %s\n", s1.name);
    printf("s1.id= %d\n", s1.id);
    printf("s1.major= %d\n", s1.major);

    printf("s2.name = %s\n", s2.name);
    printf("s2.id= %d\n", s2.id);
    printf("s2.major= %d\n", s2.major);


    return 0;
}

 

 

 总结 :

typedef 这个关键字是用来创建新名字的,并不会创建新的类型,只会创建已有类型的新名字

struct 就会创建新类型了,是 C 语言里面自定义类型的关键字,它自定义出来的类型是有序的,不同数据类型变量的集合类型

如何访问结构体类型变量的成员呐?

通过 .  操作符

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长生君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值