例如,我有一个函数:
void build()
{
struct Node *node;
node = (struct Node*)malloc(sizeof(struct Node));
}
是否可以从外部访问指针"节点"?
C是一种非常简单明了的语言。您唯一的选择是明确地将节点值放在某个地方,例如:
- 全局变量
- 函数上的参数
- 返回值
选项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...
}