C:处理指针的方法

标签 c

我想知道为什么第一种方法不起作用而第二种方法起作用:

//第一种方法

int create_node(struct node *create_me, int init){
    create_me = malloc(sizeof(struct node));
    if (create_me == 0){
        perror("Out of momory in ''create_node'' ");
        return -1;
    }
    (*create_me).x = init;
    (*create_me).next = 0;
    return 1;
}

int main( void ){
    struct node *root;
    create_node(root, 0);
    print_all_nodes(root);

}

好的,这里 print_all_nodes 函数告诉我,root 尚未初始化。现在第二种方法很好用:

struct node* create_node(struct node *create_me, int init){ //<-------
    create_me = malloc(sizeof(struct node));
    if (create_me == 0){
        perror("Out of momory in ''create_node'' ");
        exit(EXIT_FAILURE);
    }
    (*create_me).x = init;
    (*create_me).next = 0;
    return create_me; //<---------
}


int main( void ){
    struct node *root;
    root = create_node(root, 0); //<---------------
    print_all_nodes(root);

}

在我的理解中(谈到方法 1),当我给 create_node 函数指向根节点的指针时,它实际上改变了 xnext 根目录。

就像你做的那样:

void change_i(int* p){
    *p = 5;
}
int main( void ){

    int i = 2;
    printf("%d\n", i);
    change_i(&i);
    printf("%d", i);


}

它实际上改变了i。 明白了吗? 有人可以与我分享他/她的知识吗!

最佳答案

你需要一个指向指针的指针,而不仅仅是一个指针。

如果你想改变另一个函数中的一个变量,你必须发送一个指向那个变量的指针。如果变量是整数变量,则发送指向该整数变量的指针。如果变量是指针变量,则发送指向该指针变量的指针。

你在问题​​中说“当我给 create_node 函数一个指向根节点的指针时,它实际上改变了 xnext 的根目录。”你的措辞让我怀疑这里有些困惑。是的,您正在更改 xnext 的内容,但不是 root 的内容。 root 没有xnext,因为root指向 的指针一个包含 xnext 的结构。您的函数不会更改 root 的内容,因为您的函数获取的只是该指针的副本

对代码的更改:

int create_node(struct node **create_me, int init) {
    *create_me = malloc(sizeof(struct node));
    if (*create_me == 0){
        perror("Out of momory in ''create_node'' ");
        return -1;
    }
    (*create_me)->x = init;
    (*create_me)->next = 0;
    return 1;
}

int main( void ){
    struct node *root;
    create_node(&root, 0);
    print_all_nodes(root);

}

关于C:处理指针的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34222931/

相关文章:

c++ - sigaction : using "void (*sa_sigaction)(int, siginfo_t *, void *);"

c - 打印标题层次结构

c - 使用指针访问shm结构

c - 使用 SysV 信号量时不一致

c - Nios II 汇编代码转 C

c - IRC 机器人 : Error - Registration Timeout

C指针故障: it loses address information when returned from a function

c - 如何获得描述C语言中提到的输出

c - OpenMP 范围界定 - 段。共享错误()

CUDA - 限制使用的 SM 数量