【发布时间】:2020-11-02 15:00:59
【问题描述】:
程序 A
void create(struct Stack *st)
{
printf("Enter Size");
scanf("%d",&st->size);
st->top=-1;
st->S=(int *)malloc(st->size*sizeof(int));
}
int main()
{
struct stack st;
create(&st);
return 0;
}
程序 B - 对于程序 B,假设已创建一个链接列表,其中 first(声明为全局变量) 指向列表中的第一个节点。
struct Node
{
int data;
struct Node *next;
}*first=NULL;
void display(struct Node *p)
{
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
display(first);
return 0;
}
我的疑问是,为什么在程序 A 中调用 create 函数时,需要 & 运算符,为什么在程序 B 中调用 时不使用它显示功能。 create 和 display 函数都将指针作为参数。在调用函数时,您能举例说明 & 和 * 运算符之间的关系吗?提前致谢。
【问题讨论】:
-
当您有一个变量并且需要将指向该类型变量的指针传递给函数时,您可以使用
&。如果您已经有一个指向正确类型的指针,则不要使用&。 -
&x允许获取 x 的地址,无论其用途如何,如果您需要获取 x 的值,请使用xif你需要得到它的地址使用&x -
在第二个程序中,传递的变量已经是一个指针。它被定义为
*first。 -
当您将一些
&作为arguments发送到任何函数的parameters时,应该有*来保存&。这只是关系。
标签: c pointers struct pass-by-reference pass-by-value