void push(struct node** head_ref, int new_data)
{
/* allocate node */
struct node* new_node =
(struct node*) malloc(sizeof(struct node));
/* put in the data */
new_node->data = new_data;
/* link the old list off the new node */
new_node->next = (*head_ref);
/* move the head to point to the new node */
(*head_ref) = new_node;
}
如果我没记错的话,在指针上放一个括号意味着调用一个函数?
如果这是真的我真的不明白为什么* head_ref上有括号。
我喜欢一点解释为什么我在这段代码中需要*head_ref
上的括号。
答案 0 :(得分:5)
在这种特殊情况下,括号除了澄清程序员的意图之外没有其他目的,即他们想要取消引用head_ref
。
请注意head_ref
是指向指针的指针,因此在这种情况下,new_node->next
被设置为指向链表的原始头部,然后指针指向head_ref
1}}正在更新以指向new_node
,它现在是列表的开头。
正如Michael Krelin在下面指出的那样,在指针周围放置括号并不意味着它是一个调用函数或指向函数的指针。如果你看到这个:(*head_ref)()
然后,它将调用head_ref
指向的函数。
答案 1 :(得分:1)
调用函数看起来像这样:
(*some_func_pointer)();
您案例中的括号无意义。
此外,无需在C中投射malloc
(void*
)的结果。
答案 2 :(得分:1)
在你的情况下,它只是在这里取消引用指针。
你说的那个:“在指针上放置括号意味着调用函数”
如果*之后是函数指针,则为真。 基本上它取决于指针的类型。
答案 3 :(得分:1)
这些括号仅用于分组。
通过指向它的指针来调用函数:
(* funcPointer)(param1,param2)
^ ^^ ^
| |`---------`--- These brackets tell the compiler
| | it's a function call
| |
`-------------`---------------These brackets just group the *
with the variable name
对于不带参数的函数,它只是()
您的示例在变量后面没有一对括号,因此它不是函数调用。