关于struct,enum和typedef的知识总结
来源:互联网 发布:黑暗网络进入方法 编辑:程序博客网 时间:2024/06/13 07:10
声明一个结构体的一般形式是:
struct 结构体类型名
{成员变量集合};
如:struct Student{
int num;
char name;
};
结构体类型的定义方法及其初始化
C语言中的做法:struct Student stu1,stu2;
C++在保留上面的做法的同时也可用下面的方法:Student stu1,stu2;
也可在声明时直接定义
如struct Student{
int num;
char name;
}stu1,stu2;
初始化的方法有 Student stu1={100,‘a’};和一个一个变量来赋值。
指向结构体变量的指针就是该结构体变量所占据的内存段的起始地址。
使用typedef声明新的类型名
如:typedef int INTEGER;
typedef float REAL;
typedef int NUM[100];//声明NUM为包含100个元素的数组
NUM n;//那么n就是一个数组
typedef char * STRING;
STRING p;
typedef struct Student{
int num;
char name;
}STUDENT;
typedef struct Student{
int num;
char name;
}*stu;
那么stu就是一个指向结构体的指针。
下面是一种特殊的情况:
typedef struct tagNode
{
char* pItem;
pNode pNext;
}*pNode;
以上用法在编译时会出错的,因为编译的过程中遇到pNode时,系统并不知道这是
结构体的新名字,所以系统根本就不认识pNode。
应该这样做:typedef struct tagNode{
char* pItem;
struct tagNode* pNext;
}*pNode;
或者
typedef struct tagNode* pNode;
struct tagNode{
char* pItem;
pNode pNext;
};
上面的做法中,用typedef给一个还未完全声明的类型起了新名字,C++编译器中允许这种做法
使用typedef类型名有利于程序的通用和移植性,有时程序会依赖硬件特性。比如在某C++系统中int是两字节存放的,long是四字节存放,而在另一个C++系统中int是四字节存放,
long是8字节存放的,那么如果把后者移植到前者平台下,那么就需要把后者的int全部改为long,若使用typedef int INTEGER;移植后改为typedef long INTEGER;
关于enum的一点笔记
enum weekday{sun,mon,tue,wed,thu,fri,sat}workday,week_end;
1.枚举元素按常量来处理,不能对其进行赋值,如sum=0;
2.枚举类型是有值的,其值为一个整数,以上sun=0,后面依次为1,2,3,4,5
3.如果cout<<sun;输出的是0
4.可以在声明枚举类型时自己指定枚举元素的值,如 enum weekday{sun=7,mon=1,tue,wed,...} 后面值从2开始递增
5.枚举元素之间可以来比较值的大小,赋值只能用枚举元素来赋值,不能直接用整数来赋值,要强制转化后才可以
struct 结构体类型名
{成员变量集合};
如:struct Student{
int num;
char name;
};
结构体类型的定义方法及其初始化
C语言中的做法:struct Student stu1,stu2;
C++在保留上面的做法的同时也可用下面的方法:Student stu1,stu2;
也可在声明时直接定义
如struct Student{
int num;
char name;
}stu1,stu2;
初始化的方法有 Student stu1={100,‘a’};和一个一个变量来赋值。
指向结构体变量的指针就是该结构体变量所占据的内存段的起始地址。
使用typedef声明新的类型名
如:typedef int INTEGER;
typedef float REAL;
typedef int NUM[100];//声明NUM为包含100个元素的数组
NUM n;//那么n就是一个数组
typedef char * STRING;
STRING p;
typedef struct Student{
int num;
char name;
}STUDENT;
typedef struct Student{
int num;
char name;
}*stu;
那么stu就是一个指向结构体的指针。
下面是一种特殊的情况:
typedef struct tagNode
{
char* pItem;
pNode pNext;
}*pNode;
以上用法在编译时会出错的,因为编译的过程中遇到pNode时,系统并不知道这是
结构体的新名字,所以系统根本就不认识pNode。
应该这样做:typedef struct tagNode{
char* pItem;
struct tagNode* pNext;
}*pNode;
或者
typedef struct tagNode* pNode;
struct tagNode{
char* pItem;
pNode pNext;
};
上面的做法中,用typedef给一个还未完全声明的类型起了新名字,C++编译器中允许这种做法
使用typedef类型名有利于程序的通用和移植性,有时程序会依赖硬件特性。比如在某C++系统中int是两字节存放的,long是四字节存放,而在另一个C++系统中int是四字节存放,
long是8字节存放的,那么如果把后者移植到前者平台下,那么就需要把后者的int全部改为long,若使用typedef int INTEGER;移植后改为typedef long INTEGER;
关于enum的一点笔记
enum weekday{sun,mon,tue,wed,thu,fri,sat}workday,week_end;
1.枚举元素按常量来处理,不能对其进行赋值,如sum=0;
2.枚举类型是有值的,其值为一个整数,以上sun=0,后面依次为1,2,3,4,5
3.如果cout<<sun;输出的是0
4.可以在声明枚举类型时自己指定枚举元素的值,如 enum weekday{sun=7,mon=1,tue,wed,...} 后面值从2开始递增
5.枚举元素之间可以来比较值的大小,赋值只能用枚举元素来赋值,不能直接用整数来赋值,要强制转化后才可以
0 0
- 关于struct,enum和typedef的知识总结
- struct和typedef struct、enum与typedef enum、链表与结构体的区别
- struct和typedef struct、enum与typedef enum、链表与结构体的区别(转载)
- struct和typedef struct、enum与typedef enum、链表与结构体的区别
- struct和typedef struct的总结
- 关于 typedef struct 和 struct
- 关于 typedef struct 和 struct
- 关于 typedef struct 和 struct
- struct和typedef struct 总结
- struct和typedef 总结
- 愚蠢的问题关于struct和typedef struct
- C - enum和typedef enum的使用
- enum和typedef enum的区别
- typedef enum和enum的用法
- c++ struct, union,enum,typedef
- typedef和typedef struct的区别
- typedef struct和struct的区别
- typedef struct和struct的区别
- Codeforces Round #295 (Div. 2) A+B+C
- IOS学习初期的一些学渣感受[参考意义在于学习的顺序过程]
- 大数相乘
- C++虚函数
- 使用C++实现一套简单的状态机模型——实例
- 关于struct,enum和typedef的知识总结
- 记忆背包
- amr增益
- 点击其它地方关闭DIV
- 尺取法(滑窗法)的应用(POJ 3061,POJ 3320)
- apk反编译
- 以太网PHY 芯片之 MII/MDIO接口详解
- Virtual Box安装linux mint
- 文件加密之异或加密(C++实现)