size); st->top-6ren">
gpt4 book ai didi

c - c语言调用函数什么时候加 '&'什么时候不加?

转载 作者:行者123 更新时间:2023-12-04 02:33:39 25 4
gpt4 key购买 nike

程序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 函数都以指针作为参数。您能举例说明调用函数时 & 和 * 运算符之间的关系吗?提前致谢。

最佳答案

当您将一些&作为参数发送给任何函数的参数时,应该有*来保存它& 或者如果函数的 parameters 中有任何 * 你可以发送 arguments 比如 &*。这是单纯的关系。

程序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;

你需要发送 &st 因为发送 &stcreate() 可以让你访问 st 被存储。如果您发送 st——这只是存储位置的名称,st 的数据存储在该位置——作为 create()< 的参数 只是将 st 复制到 struct Stack *st 并导致错误。并且您不能像 scanf("%d", &st->size); 那样使用它的副本修改原始值;这就是为什么在第一个程序中您需要发送 st.

程序B中:

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;
}

你已经有了存储struct Node类型的data的内存地址,即first的值。这就是为什么在这种情况下不需要执行 display(&first) 只需复制 first 并在 display() 中使用它功能。

Can you explain the relationship between & and * operator while calling a function with examples.

但是你也可以像这样在程序B中做display(&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;
}

并且我希望上面给出的示例能够清楚地说明何时根据函数的参数调用任何函数时使用 *&。当心,使用&first显示数据会修改*p=(*p)->next;<中first的地址 和您指向链表的 head 指针将丢失,因此,此示例仅用于演示目的。

关于c - c语言调用函数什么时候加 '&'什么时候不加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62875461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com