结构体
1、c++中存在typedef使用方法如下:
在程序之前typedef struct node{};
之后使用此结构体可以直接定义:node a,b;
如果无typedef 应这样定义 struct node a,b;
不能省略struct;
2、在此声明结构体的定义方法:
struct 名称
{};
struct 名称 a;
名称通常为node;
对于typedef和#define区别
1、#include<bits/stdc++.h> using namespace std; typedef char * PSTR1; #define PSTR2 char *; { PSTR1 s1,s2; PSTR2 s3,s4; }
在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。
2、typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++;
是p2++出错了。这个问题再一次提醒我们:typedef和#define不同,它不是简单的文本替换。上述代码中const pStr p2并不等于const char * p2。const pStr p2和const long x本质上没有区别,都是对变量进行只读限制,只不过此处变量p2的数据类型是我们自己定义的而不是系统固有类型而已。因此,const pStr p2的含义是:限定数据类型为char *的变量p2为只读,因此p2++错误。
在编译过程中,报错如下:
根据错误信息,能够看出p2为只读的常量了,所以p2++出错了。这个问题再一次提醒我们:typedef和#define不同,typedef不是简单的文本替换,上述代码中const pStr p2并不等于const char * p2,pStr是作为一个类型存在的,所以const pStr p2实际上限制了pStr类型的p2变量,对p2常量进行了只读限制。也就是说,const pStr p2和pStr const p2本质上没有区别(可类比const int p2和int const p2),都是对变量p2进行只读限制,只不过此处变量p2的数据类型是我们自己定义的(pStr),而不是系统固有类型(如int)而已。
所以,const pStr p2的含义是:限定数据类型为char *的变量p2为只读,因此p2++错误。
注意:在本示例中,typedef定义的新类型与编译系统固有的类型没有差别。
3、指针使用const
(1)指针本身是常量不可变
char* const pContent;
(2)指针所指向的内容是常量不可变
const char *pContent;
(3)两者都不可变
const char* const pContent;
(4)还有其中区别方法,沿着号划一条线:
如果const位于的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
共用体
声明方法与过程与结构体类似;
即union替换struct,scanf与printf时声明输入输出类型;
使用可能性较小
枚举
作为枚举,声明枚举对象时无“;”
即以下过程:
enum
{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};
枚举过程中第一项为0,之后一直+1,即Sunday=6;
若声明改为Monday=1,之后同样+1;