【发布时间】:2015-07-01 13:57:28
【问题描述】:
在下面的代码中,我可以从函数中修改 main 中使用的变量。
#include<stdio.h>
int main()
{
int *a,b=10;
a = &b;
printf("%d\n",*a);
ref(a);
printf("%d\n",*a);
return 1;
}
int ref(int *a)
{
int b = 98;
*a = b;
return 1;
}
而在下面的代码中,我无法做到这一点。
我知道我们可以使用双指针从函数中修改主值。我也知道我们可以使用单指针进行修改,方法是将所需的地址返回给主,并以相同的数据类型在主中获取它。我只是想知道是否可以通过将 main 中的值作为参数传递给函数来修改 main 中的值,仅作为指向(结构)变量的单个指针。
注意:我已经用注释“//WC”表示了工作代码。如果有人能向我解释一下,将非常感激。
//int insert(int data, Node **head) //WC
int insert(int data, Node *head)
{
Node *temp, *run;
temp = (Node *) malloc(sizeof(Node));
temp->data = data;
temp->next = NULL;
//if(*head == NULL) //WC
if(head == NULL)
{
printf("1st node\n");
//*head = temp; //WC
*head = *temp;
}
else
{
printf("node after first\n");
//run = *head //WC
*run = *head;
while(run->next != NULL)
{
run = run->next;
}
run->next = temp;
}
return 1;
}
int main()
{
Node *head;
insert(10, head);
insert(20, head);
insert(30, head);
insert(40, head);
insert(50, head);
return 1;
}
【问题讨论】:
-
在以后的版本中,
if(head == NULL) {*head = *temp;}会出现段错误。 -
使用单个
*,您可以修改参数指向的内容,但不能修改指针本身。那是您需要 double**的时候,然后您可以修改两者。如果你想修改它,你必须(如你所说)从函数返回一个新的指针值。 -
同样,您的后一个版本
*run = *head;也会调用未定义的行为;run不确定。坚持任一种你知道的工作方式。 -
是的,我知道我的代码不可执行,我无法使其可执行。这就是为什么我发布问题@SouravGhosh
-
@Denise 你没明白我的意思。我想,你实际上是想写
head = temp,不是吗?不需要取消引用。
标签: c pointers structure singly-linked-list