8

可能重复:
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

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

它们在内存中的存储也有什么区别吗?

4

7 回答 7

24

基本区别是这样的:

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

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

假设你有 struct a

struct a{
    int b;
}

但是 sayc是一个指向a然后你知道的指针:c = (*a). 因此,->它被用作特定情况的替代方案.。因此(*a).b,您可以做而不是做c->b,这是完全相同的。

于 2012-12-30T00:40:08.947 回答
11

->定义为.

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

->为方便而存在。

于 2012-12-30T00:40:54.947 回答
3

当处理指向结构的指针时,使用->,当直接使用它们时,使用..

于 2012-12-30T00:40:23.697 回答
3

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

于 2012-12-30T00:41:38.207 回答
3

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

a -> b是相同的(*a).b

想想就好a = a + 1。为了简单和方便,a++用于完成相同的确切结果。

于 2012-12-30T02:43:04.490 回答
2

简而言之,期望给出相同的结果,您所做的是更改内存分配以及如何访问结构中的数据。关于您想要了解的内容的一些很好的链接是关于动态内存分配使用 C++ 中的动态内存的教程。

于 2012-12-30T00:50:23.083 回答
2

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

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

但是,如果使用指向成员的指针,它可以像这样解决..

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

于 2012-12-30T03:10:02.250 回答