C语言结构体易混淆概念辨析
C语言结构体易混淆概念辨析
1.结构体是什么?
用户自定义类型
#include <stdio.h>
//最简单的结构体
struct INT
{
int a;
long b;
};//自己建立的数据类型 类型叫 struct INT
int main() {
//INT dcf; //为啥报错? 系统没有INT类型
struct INT dcf1; //定义struct INT类型的变量dcf1
int dcf2; //定义int 类型的变量dcf2
}
2.在声明结构体的同时定义变量(简写版本)
#include <stdio.h>
//最简单的结构体 精简版
struct INT
{
int a;
long b;
}dcf1;//dcf1是啥?是struct INT类型的变量名dcf1
int main() {
struct INT ddd2;//还想定一个新变量时候,可以这样添加 见表格2
//struct INT dcf1;//这样太长太麻烦
}
3.用typedef简化类型名
#include <stdio.h>
//最简单的结构体 精简版
typedef struct INT
{
int a;
long b;
}Int;//Int是啥?是struct INT类型的另一个名字Int类型
// struct INT == Int
int main() {
//struct INT dcf1;//类型太长太麻烦用typedef
Int dcf1; //有两种定义变量的方法
}
4.用typedef简化类型名时原来名字可以省略
#include <stdio.h>
//最简单的结构体 精简版
typedef struct
{
int a;
long b;
}Int;//Int是啥?是自己定义的Int类型
int main() {
Int dcf1; //只有这一种定义变量的方法
}
5.没名结构体
#include <stdio.h>
//没名结构体
struct
{
int a;
long b;
}dcf1;
int main() {
//没名结构体不能直接定义变量
//只能在声明结构体时定义变量
//如果还想添加新变量,只能在dcf1后边写"dcf2......."
}
类别 | 原类型 | 新类型名字 | 定义变量方式 |
---|---|---|---|
1 | struct INT | x | struct INT dcf1 |
2 | struct INT | x | 声明时定义(还可以用例子中主函数写的) |
3 | struct INT | Int | Int dcf1 或 struct INT dcf1 |
4 | 无名结构体类型 | Int | 只能 Int dcf1 |
5 | 无名结构体类型 | x | 只能声明时定义 |
总结:声明时定义就不能用typedef,