字节 指的就是 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;
}
数组的本质是一个有序集合,是相同变量的有序集合
在两个 { } 之间定义的变量叫做成员变量,
因为使用了 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 语言里面自定义类型的关键字,它自定义出来的类型是有序的,不同数据类型变量的集合类型
如何访问结构体类型变量的成员呐?
通过 . 操作符