“ - >”之间的区别和“。”在C.

时间:2012-12-30 00:37:48

标签: c

  

可能重复:
  Arrow operator (->) usage in C

我想弄清楚“。”之间的区别。和“ - >” C语言中的数据访问风格。 例如

struct div{
    int quo;
    int rem;
};

1)使用“ - >”

struct div *d = malloc(sizeof(struct div));
d->quo = 8/3;
d->rem = 8%3;
printf("Answer:\n\t Quotient = %d\n\t Remainder = %d\n-----------\n",d->quo,d->rem);

2)使用“。”

struct div d;
d.quo = 8/3;
d.rem = 8%3;
printf("Answer:\n\t Quotient = %d\n\t Remainder = %d\n-----------\n",d.quo,d.rem);

我为这两种情况获得了相同的输出。

  

答案:商数= 2剩余= 2

这两种方法如何在内部运作?什么时候应该使用哪一个? 我尝试在互联网上搜索但没有多大帮助。任何相关链接也表示赞赏。

他们在内存中的存储也有什么不同吗?

7 个答案:

答案 0 :(得分:10)

基本区别在于:

. is the member of a structure
-> is the member of a POINTED TO structure

因此,当直接访问结构中的变量时,将使用.。但是当您通过指向该结构的指针访问结构的变量时,将使用->

假设你有结构a

struct a{
    int b;
}

但是,c是指向a的指针,那么您就知道:c = (*a)。因此,->被用作.的某个案例的替代方案。因此,您可以执行(*a).b而不是c->b,而不是{{1}}。

答案 1 :(得分:7)

->是根据.

定义的

也就是说,a->b相当于(*a).b,因此您显然会得到相同的结果。

为方便起见,

->存在。

答案 2 :(得分:2)

在处理结构指针时,请使用->,直接使用时,请使用.

答案 3 :(得分:2)

当您需要手动管理创建的对象的生命周期时,请使用第一种方法。当创建的对象的生命周期限于创建它的范围或包含它的对象的范围时,请使用第二种方法。

答案 4 :(得分:2)

在C中,->.非常相似,但处理指针。在结构中,.用于直接引用结构中的成员,而->用于引用指向结构的成员。根据具体情况,您可以使用指针得到相同的结果。

a -> b(*a).b

相同

将其想象为a = a + 1。为简单起见,a++用于完成相同的结果。

答案 5 :(得分:1)

简单来说,它应该给出相同的结果,你要做的是改变内存分配以及如何从结构中访问数据。 关于您想要理解的内容的一些良好链接是an tutorial about dynamic memory allocationWorking with Dynamic Memory in C++

答案 6 :(得分:1)

当使用时,它被称为成员结构..

当使用 - > 时,它被称为指向成员的指针..

如果使用指向成员的指针,可以像这样解析..

x - > y和(* x).y都是一样的..