您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
请问C语言中s. top和s->top有什么区别吗?
指针,变量,结构请问C语言中s. top和s- top有什么区别吗?
发布时间:2020-12-06加入收藏来源:互联网点击:
请问C语言中s. top和s->top有什么区别吗?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
没那么复杂,不需要什么长篇大论,只需要记住一个规律就好了:
a.b a必须是普通结构体变量
a->b a必须是结构体指针
这是C语言语法的强制性规定,只需要记住就好了。如果代码中写错的话,编译的时候,编译器会提示错误信息。
回答于 2019-09-11 08:43:50
提问者对结构与结构的指针这两个区别肯定体会尚浅。
结构s,则s.top
结构的地址s就是所谓指针,则s一>top
回答于 2019-09-11 08:43:50
s.top => s为普通变量
s->top => s为指针变量
回答于 2019-09-11 08:43:50
这要从C语言的变量与指针这两个概念说起。
在C语言中每个变量都有一种类型,比如基础变量char, int, long, float等,还有表示复杂数据的结构体和联合体。结构体和联合体是一种递归定义的数据类型,但是最终还是由基本类型定义。
那么问题来了,对于基本的数据类型,直接使用变量名就可以访问,但是对于这些复杂结构,该如何访问他们的成员变量,这个时候就需要一种机制,于是
s.top
这种访问方式就出现了。但是还有一个问题,一个变量可以用实例来定义并访问,也可以通过指针来定义访问,于是针对访问指针类型的结构体或联合体的成员,s->top就出现了。
其功能类似,只是一个用于实例变量,一个用于指针。当然,对于实例变量也可以这样访问(&s)->top;同理,对于指针你也可以这样(*s)
.top
。从语法上来说都没有错,只是简单问题复杂化,一般不这样用罢了。回答于 2019-09-11 08:43:50
s.top 这里s是一个结构体类型的变量,sizeof运算后能得到一个结构体实例所占内存大小
s->top 这里s是一个结构体指针类型的变量,这个变量里面存储的是指向结构体实例的内存地址,所以这个变量大小是固定的,32位机器上变量大小是4个字节64位机器上是8个字节
要理解指针就要知道汇编语言里面的直接寻址和间接寻址,所谓间接寻址就是通过存储一个变量的地址去间接访问这个地址上的变量,指针就是间接寻址的运算符。
回答于 2019-09-11 08:43:50
先说一个概念,是c语言里唯一的概念,指针。
对于指针来说,一定是箭头,表示指向。点可以理解成成员的概念。比如定义一个结构体A b{c},你可以用b.c调用,代表c是b的成员,啥意思,b是个房子,你去房子里找c。你如果定义 A* d,那只能用d-\u003ec了,为啥呢?因为d是一个指针,代表我告诉你去那个房子那,然后去房里去找c,我本身告诉你得d仅仅是个门牌号码,是没有内容的。整个c就一个概念,就是门牌和房子的关系,就是指针的含义。
回答于 2019-09-11 08:43:50
指向的对象是相同的,但是.的主体需要是一个结构体,而-\u003e的主体需要是一个指针。
回答于 2019-09-11 08:43:50
一个是结构体变量,一个是结构体指针
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |