首页 > 解决方案 > 如何定义结构指针和非指针(. 和 ->)?

问题描述

如果我的结构看起来像:

struct contact {
    char* name;
    int number;
};

我正在编写的其中一个函数如下所示:

int find(struct contact* pb, int len, char* name)
{
    for (int i = 0; i < len; i++)
        if (strcmp(name, pb->name[i]) == 0) // pb[i].name is OK!
            return pb[i].number; // pb->number[i] ? - but number is not a pointer
.
.
.

如果我们仔细看一下这个函数find,我们可以看到如下:pb->name[i]就像写法pb[i].name一样。但是呢:pb[i].number?我知道这number不是一个指针,所以我怎么能把它写成:pb[i].number?它不能是:pb->number[i],对吧?

标签: arrayscxcodepointersstruct

解决方案


pb->name[i]不一样。_pb[i].name

pb->name[i]告诉计算机:

  • 查看存储在变量中的值pb(这是一个地址)
  • 查看该地址指向的结构 ( ->)
  • 看看name那个结构中的。
  • 查看数组中指向的i-th 东西。name

即它返回i第一个联系人姓名中的-th 字符。

pb[i].name告诉计算机:

  • 查看存储在变量中的值pb(这是一个地址)
  • 查看i该地址指向的数组中的第 -th 结构
  • 看看name那个结构中的。

即它返回i第-个联系人姓名的地址。

pb->number[i]没有意义,因为number不是数组。您i从第一个联系人的号码中要求 -th 东西,但该号码不是数组或指向一个的指针。

pb->name[i]也是错误的,但这是有道理的。你在向计算机索要一些你不想要的东西,但至少它是可能的,所以无论如何计算机都会这样做。


推荐阅读