zhwm3064 发表于 2014-3-15 17:50:42

请教:->与.的区别 我觉得差不多吧

->是指针
A.a=1;
A->a=1:
不是一样的吗?

qinxg 发表于 2014-3-15 18:01:59

前A为结构, 后A为结构指针.

error_dan 发表于 2014-3-15 18:15:04

回去重新学C.

tdchenke 发表于 2014-3-15 18:30:06

cp为指向结构体的指针    (*cp).a   等价于cp->a   《C和指针》198页有讲到

zhwm3064 发表于 2014-3-15 20:34:27

tdchenke 发表于 2014-3-15 18:30
cp为指向结构体的指针    (*cp).a   等价于cp->a   《C和指针》198页有讲到

我一个程序里面有这么一条:
CurrentMenuNode=(*CurrentMenuNode).Next_Node;
基本意思可以用文字表达一下

当前菜单节点(指针型)=当前菜单节点(已经指向了实际变量的地址).下一个节点的(地址)

然后上面的语句也可以表达为:
CurrentMenuNode=CurrentMenuNode->Next_Node;

综合来讲,加上*,直接指向了实际变量地址 而后 进行操作
            不加上*,就是一个指针,加上->,同样也指向了 实际的变量里面了。
第一句的意思是 指针结构,指向的地址,取里面的一个元素
第二句的意思是 结构,结构中的内容为指针,把指针指向另一个结构中,并取其中的一个元素。

DevLabs 发表于 2014-3-15 20:49:55

为结构体变量是用“.”,为结构体指针时用“->”

takashiki 发表于 2014-3-15 21:21:01

在C中,.和->代表的含义其实是一样的,->只不过是(* xxx).的简写而已,区别仅仅是一个作用于指针,另一个作用于指针指向的值。

但是在C++中,中间的差异非常明显。因为.无法重载,而->和*都是可以重载的,重载后的行为可能非常有意思。
举个好玩的例子:struct CA{
    int a;

    inline CA* operator ->(){                  // 重载->,注意是要作用到值哦,不是指针。
      return this;
    }
};

CA A;

A.a = 1;   
(&A)->a = 1;            
A->a = 1;上面最后三行在优化后编译出来的代码完全一样,但是意义并不一样哦。

菜鸟很热心 发表于 2014-3-17 16:46:32

本帖最后由 菜鸟很热心 于 2014-3-17 16:49 编辑

看看吧,支持一个

slzm40 发表于 2014-4-1 09:00:57

一个为结构体变量是用“.”,一个为结构体指针时用“->”,在引用变量,"."和“->”是一样的。在指针引用时,只能用“->”,不然会出错

yu_studio 发表于 2014-4-1 09:41:50

我记得把keil和程序移植到IAR的时候,某些地方的 .需要改成 ->(或是-> 改成 .   具体忘记了是哪个改哪个)

sbusr 发表于 2014-4-1 09:56:52

.是用于取结构体变量的成员。而->是用于取结构体指针的成员。

fraser 发表于 2014-5-1 00:31:24

支持一个
页: [1]
查看完整版本: 请教:->与.的区别 我觉得差不多吧