我试图在C中创建一个函数来从最后一个节点传递K,并且我很难在中找到&amp; 运算符的替代品c ++ 这是一个参考。 我明白我应该用<*>切换&amp; ,但它似乎仍然不适合我。
my_node *k_to_last(my_node * head, int k, int *pos)
{
if (head == NULL)
return NULL;
my_node *current = k_to_last(head->next,k, &pos);
pos++;
if (pos == k)
return head;
return current;
}
int main ()
{
int k;
int pos = 0;
printf("\nEnter the K node: ");
scanf("%d", &k);
printf("\nthe %d node value from last is: %d\n", k_to_last(head, k, &pos)->value);
return 0;
}
感谢您提前提供任何帮助,请忽略一些小问题,例如使用scanf而不是fget等...
编辑:非常感谢&#34; JeremyP&#34;他的回答 固定代码:
my_node *k_to_last(my_node * head, int k, int *pos)
{
if (head == NULL)
return NULL;
my_node *current = k_to_last(head->next, k, pos);
(*pos)++;
if (k == *pos)
return head;
return current;
}
int main()
{
int k;
int pos = 0;
printf("\nEnter the K node: ");
scanf("%d", &k);
printf("\nthe %d node value from last is: %d\n", k, k_to_last(head, k, &pos)->value);
return 0;
}
答案 0 :(得分:0)
*
表示“指针”。与C ++引用不同,类似DIY引用的指针不会自动解除引用。所以在宣言中
my_node *k_to_last(my_node * head, int k, int *pos)
pos
是一个指针(因此head
)。如果要访问它引用的int
,则必须明确取消引用它,例如
if (k == *pos) // Note the *
{
// do somenthing
}
(*pos)++; // increment the int to which pos points
另外,要将int
传递给pos
的函数,您必须使用&
运算符获取其地址。
int pos = 0;
my_node head; // Gloss over the fact that this is uninitialised
k_to_last(&head, k, &pos);
但是在函数内部,因为pos
已经是指针,所以你不需要为需要int*
的参数获取地址,例如,在递归调用函数时。
my_node *k_to_last(my_node * head, int k, int *pos)
{
if (head == NULL)
return NULL;
my_node *current = k_to_last(head->next,k, pos); // no & needed here
}