摘要:
Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记:声明可以多次,定义只能一次。函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的。但是引用的时候一样是需要声明的。而全局变量在外部使用声明时(注意只有全局变量才能在外部使用),extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。而局部变量的声明不能有extern的修饰,且局部变量在运行时才在堆栈部分分配内存。全局变量或函数本质上讲没有区别,函数名是指向函数二进制块开 阅读全文
摘要:
结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。1. 自引用结构体1.1 不使用typedef时错误的方式:struct tag_1{ struct tag_1 A; int value;};这种声明是错误的,因为这种声明实际上是一个无限循环,成员A是一个结构体,A的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。正确的方式:(使用指针)struct ... 阅读全文