【C语言】typedef struct 和 struct 使用区别

【C语言】typedef struct 和 struct 使用区别,第1张

 1. 什么是 typedef ?   

typedef 可以为某一类型自定义名称,与#define类似,但区别如下:

typedef和#define区别
typedefdefine(预处理器)
创建的符号名字只限于类型,不能用于值。明示常量
typedef由编译器解释,不是预处理器#define PX printf("x id %d. \n", x)
可声明一系列变量不可以声明一系列变量

typedef  int8 BYTE;

则可以使用BYTE来定义变量,BYTE x;

typedef 作用域取决于其定义的位置,如果在函数中,作用域受限于定义的函数。如果在外面则具有文件作用域。

typedef的目的是为现有的类型创建一个名称。

在C++中为类型创建别名的方式有两种:

1)预处理器 #define BYTES char;

2) 使用关键字typedef:typedef char byte;

2. 将typedef用于结构(C语言) 2.1 typedef和struct共同作用的综合性写法
typedef struct device{
    int16 co2;
    int8  temp;
}DEVICE;

device是标识符;DEVICE是变量类型。

使用typedef的好处是为经常出现的类型创建一个方便,容易识别的类型名。

同时注意,使用typedef来命名一个机构类型时可以省略该结构的标签,也就是上述的device。

在变量声明时就可以如下声明:

DEVICE device1;

总结:

1)DEVICE device1;

2)struct device device1;

2.2 struct作用的结构体写法

如果没有typedef来定义这个结构体数据类型,就必须这样来声明一个结构体变量:

struct device{
    int16 co2;
    int8  temp;
};
struct device device1;

或者直接生成变量device1如下公式所示: 使用时直接可以device1.co2;

struct device{
    int16 co2;
    int8  temp;
}device1;

这里的DEVICE其实就等同于struct device;

总结:

1)struct device device1;

2.3 只使用typedef来命名结构体(标准写法)

使用typedef来命名结构体数据类型时可以省略该结构的标签。

typedef struct{
    int16 co2;
    int8  temp;
}DEVICE;

但是这样的写法就不能使用struct device device1了,只能使用DEVICE device来创建结构体变量。

3. 将typedef用于结构(C++)
struct DEVICE{
    int16 co2;
    int8  temp;
};
DEVICE device1;

其中DEVICE标记成为新的类的名称。定义好结构之后就可以创建这种类型变量了。

在这里和C语言进行对比我们会发现:C++允许在声明结构变量时省略的关键字struct。

4. 结构体中引用const防止误 *** 作
void printStudent(const student* stu)
{
	//stu->age = 100;		 *** 作失败因为加了const修饰
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/740795.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-28
下一篇2022-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存