在链表中取消引用?

derefrencing in linked list?

我正在学习 C,看到了这段创建链表的代码:

typedef struct node {
    int val;
    struct node * next;
} node_t;

void print_list(node_t * head) {
    node_t * current = head;

    while (current != NULL) {
        printf("%d\n", current->val);
        current = current->next;
    }
}

我的问题是,如果 current 只是一个保存内存地址的指针,如何在 current->val 中将 -> 运算符应用于它,并期望打印小数点 - printf("%d\n", current->val); 肯定会忽略格式说明符 this ,将打印内存地址而不是文字值,因为它没有被解除引用,或者是箭头运算符执行解除引用?

if current is simply a pointer holding a memory address

是的。它的声明不容置疑。

how can the -> operator be applied to it in current->val ,

-> 是适用于(仅)具有 pointer-to-structure 类型的对象的运算符。

expecting a decimal to be printed - printf("%d\n", current->val)

-> 表达式的结果是 pointed-to 结构的指定成员。成员本身,而不是指向它的指针。表达式 (a)->b 完全等同于 (*(a)).b。所以,

or is it the arrow operator that does the dereferencing?

是的。