如何使用带有双指针变量的结构字段(没有支持变量)?

Posted

技术标签:

【中文标题】如何使用带有双指针变量的结构字段(没有支持变量)?【英文标题】:how to use a struct field with a double pointer variable (without a support variable)? 【发布时间】:2020-05-30 23:47:46 【问题描述】:

我在 c 中有这个结构

struct node
    int info;
    struct node* link;
;

这个过程:

void example(struct node** head)
    struct node* tmp;
    tmp=*head;
    tmp->info=0;
    *head=tmp;

并在主程序中调用过程

example(&head); 

所以要修改head->info我需要一个支持变量,没有支持变量还有另一种方法吗?

【问题讨论】:

【参考方案1】:

使用这个:

void example(struct node** head)
    (*head)->info=100;

它的作用与您的 example 函数相同。 通过取消引用struct node**,我们得到struct node*,然后我们可以使用-> 箭头运算符简单地访问它的成员。

【讨论】:

结构愉快 :-)【参考方案2】:

如果你有一个指向像

这样声明的对象的指针
struct node *head; 
head = malloc( sizeof( struct head ) );

那么你就可以写了

head->info = 10;

因此,由于对象info是通过引用传递给函数示例,因此将函数的参数声明为指针的指针没有多大意义

void example(struct node** head)
                    ^^^^^^^^^^^

你可以像这样定义函数

void example(struct node *head)
    head->info=0;

在函数中改变head本身时,需要通过引用传递head。

例如

void insert( struct node **head, int info )

    struct node *tmp = malloc( sizeof( struct node ) );

    tmp->link = *head;
    tmp->info = info

    *head = tmp;
  //^^^^^^^^^^^ 

如果您需要使用指向指针头的指针更改数据成员信息,那么首先您需要取消引用它以获取指向对象信息的指针,然后应用运算符 ->。例如

( *head )->info = 0;

在 C 语言中,如果你想在函数中更改一个对象(尤其是指针),你必须通过引用传递它,而在 C 语言中意味着通过指向它的指针传递一个对象。

【讨论】:

以上是关于如何使用带有双指针变量的结构字段(没有支持变量)?的主要内容,如果未能解决你的问题,请参考以下文章

python ctypes:从指针变量中获取指向类型

双指针算法总结

双指针算法总结

双指针算法总结

双指针算法总结

JS 双指针解决三数四数之和