在链表中取消引用?
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?
是的。
我正在学习 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 incurrent->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?
是的。