访问函数内部创建的数据结构?

时间:2014-10-12 19:03:16

标签: c memory dynamic struct malloc

例如,我有一个功能:

void build()
{
   struct Node *node;
   node = (struct Node*)malloc(sizeof(struct Node)); 
}

是否可以从外部访问指针“节点”?

2 个答案:

答案 0 :(得分:0)

C是一种非常简单易懂的语言。您唯一的选择是明确地将节点值放在某处,eiter:

  1. 全局变量
  2. 功能上的参数
  3. 返回值
  4. 选项2和3是最常见的选项。作为函数的一个参数:

    void build(struct Node **node_param)
    {
       struct Node *node;
       node = (struct Node*)malloc(sizeof(struct Node)); 
       *node_param = node;
    }
    

    对于选项3可以简单地说:

    struct Node * build()
    {
       struct Node *node;
       node = (struct Node*)malloc(sizeof(struct Node)); 
       return node;
    }
    

    您可以创建一个独立变量,也可以创建一个包含更多字段的结构,以防您有多个值从函数返回。

答案 1 :(得分:0)

  

是否可以从外部访问指针“节点”?

不,不是这个确切的指针,因为你不知道malloc返回的内存地址。如果从函数返回初始化指针,或者将其作为参数传递给此函数,则可以访问Node指向的*node实例,在函数内部初始化并在此之后使用。

示例:

// pass pointer to pointer, so we will change original pointer not a copy
void build( struct Node **nodePtr)
{
   struct Node *node;
   node = malloc( sizeof( struct Node)); 
   //   ^^^^
   // no need to cast result of malloc in C
   *nodePtr = node;
   // the rest...
}