问题一: 结构体的自引用
错误:
typedef struct _Pos{
int x;
int y;
struct _Pos z;
}pos;
定义一个结构体,其内部又定义了一个同类的结构体变量,这是一种错误。(因为如果你在结构体内部定义自己类型的结构体变量,在定义结构体的过程中,它会不断地去创建新的结构体变量,一直递归下去,没完没了) -- 有的编译器会检测到这种错误的写法。
正确:
我们可以在结构体内部放一个指向自己类型的指针,这样就不会出现上面的问题了。
typedef struct _Pos{
int x;
int y;
struct _Pos *z;
}pos;
问题二: 结构体指针
pos* ptr; // 定义一个结构体指针
注意下面的操作是不合法的:ptr+1; // 对于结构体,因为其内部存储数据类型并不一样,所以我们无法使用指针 或者下标运算符进行访问内部数据
(*ptr)+1; // ptr是指向结构体的指针,内部存放的是结构体所在的地址,虽然结构体所在的地址(其首地址),和其第一个元素的(首)地址是一样的,但是*ptr的结果并不是结构的第一个元素,而表示的是ptr指向的是结构,因为ptr是结构类型的指针。对于结构体和一个整数像加时未定义的。