可以参考《C和指针》P206
一、在结构体内部如下定义是违法的:
struct s
{
int a;
struct s b;
}
因为内部包含自己的成员永远不会终止,类似递归。
但是如下定义是合法的:
struct s
{
int a;
struct s *b;
}
这是因为其内部是个指向该结构体类型的指针,而指针的长度是可以确定的,一般四个字节。
二、由于在用结构体作函数形参时,是传值的方式传递给函数,这样的话,如果函数调用时,传递的结构体参数比较多,容易造成效率较低。因此,用结构体的指针作为函数的形参,进行传址操作,把它压到堆栈上能提高效率。
三、结构体名和数组名
结构体和其他int char一样,当结构体名作为右值使用时,它表示存储在结构体中的值,当它作为左值使用时,他表示结构存储的内存位置。
但是,当数组名作为右值使用时,它的值是一个指向数组第一个元素的指针,且由于它是一个常量指针不能为作为左值使用。