【问题标题】:how to use a pointer inside struct in C如何在C中的struct内部使用指针
【发布时间】:2012-10-10 18:33:48
【问题描述】:

我有两个结构,一个是链表。

typedef struct Mark{
       int  people;
       Node *nodeyy;
}Mark

typedef struct Node{
       struct node next;
       int value;
}Node

如果我为一个节点分配了内存,比如说

 Node *node1=malloc( sizeof(struct Node));

我还为书签分配了内存,比如说

 Mark *mark1=malloc( sizeof(struct Mark));

我想让mark1中的指针nodeyy指向和node1一样的东西,我该怎么做呢?

我认为

 mark1->nodeyy=node1;

肯定是错的。

【问题讨论】:

  • 现在你已经编辑了代码,为什么你认为mark1->nodeyy = node1是错误的?

标签: c data-structures linked-list


【解决方案1】:

现在是正确的:

您必须初始化指针或将其指向您知道不会超出范围的现有变量。但是由于 node1 是动态分配的,所以您只是将一个指针分配给另一个指针,这会创建一种对 node1 指向的新分配内存的引用。

mark1->nodeyy = node1;

此语句后,mark1->nodeyy和node1指向malloc(sizeof(Node))返回的内存位置。

【讨论】:

  • 对不起,错字,我的意思是节点 *nodeyy;
【解决方案2】:

将 struct Mark 中的 int* 更改为 Node*

typedef struct Mark{
       int  people;
       Node *nodeyy;
}Mark

那你就可以了

mark -> nodeyy =  (Node *) malloc(sizeof(Node))

【讨论】:

  • i 虽然 mark-> nodeyy 只是对节点的引用,为什么我们需要为引用分配内存?是什么原因我们不能只说mark->nodey=node1; ?
  • 是的,但是 mark->nodeyy 在你的代码中是一个 int*,它不能保存结构节点的地址
  • 对不起,错字,我的意思是节点 *nodeyy;
  • 我们可以说mark1->people=10,我们可以说mark1->nodeyy= node1; ?我的问题:需要 malloc 步骤吗?
  • 因为 node1 只是一个类型(就像原始类型 int、float 一样)。您需要创建该类型的变量并使 mark->nodeyy 指向该变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 2014-10-29
  • 2022-06-18
相关资源
最近更新 更多