类型不同
struct
student
是一个类型
char数组
是一个类型
p是指向类型struct
student的指针
stu[1]name是真相char[]的指针。
c++是强类型语言,类型必须对应
你可以通过强制类型转换来实现
p
=
(struct
student
)
stu[1]name
,但是根据本题目情况,这样产生的结果是错误的
因为自己类型的变量在这个类型中定义时,是不完整类型,除非你完成定义,不然不会知道这个类型的大小,而且本身嵌套本身,就等于是无穷递归的展开了。
但指针就不同了,C语言的指针大小是4个字节,他只是指向一个地址,和其他的全部无关,他不需要知道自己类型有多大,有怎样的结构什么的,这些都不是他该关心的,他只要指向一个正确的地址就OK了,这就是指针的职责。定义指针是确定,不会影响该类型的结构,也不会出现无穷递归展开,所以在结构体中定义自身指针是合法的。
这几个结构体中的几个成员,都是指针,只不过这几个都是函数指针,你可以在其他地方定义函数,然后赋值给这些指针,比如init,就可以给他赋值一个用于初始化结构的函数,其它也是一样。
其实这就是面向对象的编程,相当于C++中类的方法而已。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)