C语言结构体中成员若是一个指针时的疑惑??

C语言结构体中成员若是一个指针时的疑惑??,第1张

类型不同

struct

student

是一个类型

char数组

是一个类型

p是指向类型struct

student的指针

stu[1]name是真相char[]的指针。

c++是强类型语言,类型必须对应

你可以通过强制类型转换来实现

p

=

(struct

student

)

stu[1]name

,但是根据本题目情况,这样产生的结果是错误的

因为自己类型的变量在这个类型中定义时,是不完整类型,除非你完成定义,不然不会知道这个类型的大小,而且本身嵌套本身,就等于是无穷递归的展开了。

但指针就不同了,C语言的指针大小是4个字节,他只是指向一个地址,和其他的全部无关,他不需要知道自己类型有多大,有怎样的结构什么的,这些都不是他该关心的,他只要指向一个正确的地址就OK了,这就是指针的职责。定义指针是确定,不会影响该类型的结构,也不会出现无穷递归展开,所以在结构体中定义自身指针是合法的。

这几个结构体中的几个成员,都是指针,只不过这几个都是函数指针,你可以在其他地方定义函数,然后赋值给这些指针,比如init,就可以给他赋值一个用于初始化结构的函数,其它也是一样。

其实这就是面向对象的编程,相当于C++中类的方法而已。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12172609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存