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



例如,我有一个函数:

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

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

C是一种非常简单明了的语言。您唯一的选择是明确地将节点值放在某个地方,例如:

  1. 全局变量
  2. 函数上的参数
  3. 返回值

选项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;
}

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

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

不,不是这个确切的指针,因为您不知道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...
}

相关内容

  • 没有找到相关文章

最新更新