【问题标题】:How to use struct in c?如何在c中使用结构?
【发布时间】:2011-11-05 22:10:49
【问题描述】:

这是我的代码:

struct Point
{
    int i;
    int j;
};

int main(int argc, char *argv[])
{
    int n = atoi(argv[1]);
    int a;
    int b;
    for(a = 0; a < n; a++)
    {
        for(b = a+1; b < n; b++)
        {
            struct Point *data = (struct Point *) malloc(sizeof(struct Point));
            data.i = a;
            data.j = b;
            // do something here
            free(data);
        }
    }

    return 0;
}

data.i = a;data.j = b; 出现错误:

error: request for member 'i' in something not a structure or union
error: request for member 'j' in something not a structure or union

我该如何解决这个错误?

另外,我应该在malloc(sizeof(struct Point)) 之后使用free() 吗?

【问题讨论】:

  • FWIW,如果您在当前迭代结束后不需要这些值,则不需要malloc(因此,不需要free)。您可以像现在一样简单地使用struct Point data; 并分配成员。
  • @delnan 其实我在另一个线程中使用它,所以我不得不使用malloc
  • 您对指针和动态内存分配不满意而使用线程?!?
  • @delnan 我是一名Java程序员,所以我对指针一点也不熟悉。
  • data-&gt;i 是在使用 . 运算符访问其成员之前取消引用指针(以获取特定结构类型的对象)的方式的快捷方式:(*data).i。跨度>

标签: c++ c pointers struct free


【解决方案1】:

data 是一个指针。你必须说data-&gt;i等等。只有当你不再需要数据结构时才调用free()

【讨论】:

    【解决方案2】:

    data 是指向结构的指针,而不是实际的结构。你应该改用data-&gt;i

    是的,如果你 malloc() 一个结构,那么当你完成它时你应该 free() 它。

    【讨论】:

      【解决方案3】:

      除了上面的答案,稍微解释一下:

      你有一个指向结构的指针。首先,您应该使用星号运算符取消引用它,然后您可以使用它。 “->”运算符是“*v”的缩写形式。其中 v 是指向结构的指针。所以你有data-&gt;i 相当于*data.i

      【讨论】:

      • 不,(*data).i 等同于 data-&gt;i。你写的相当于*(data.i)
      猜你喜欢
      • 2021-04-23
      • 2010-11-17
      • 2011-10-28
      • 2014-10-07
      • 2019-06-05
      • 1970-01-01
      • 2014-11-28
      • 2014-04-05
      • 1970-01-01
      相关资源
      最近更新 更多