C语言问题 #include <stdio.h> typedef struct {int b,p;} A; void f(A c)详见问题补充里的

2025-02-23 05:54:18
推荐回答(3个)
回答1:

这是实参和形参结合的问题。主函数的变量a仅仅把自己的拷贝传给函数f(),函数f()仅仅操作了a的复制品,并不能改变原来主函数内a的值。你可以这样:
void f(A* c)
{int j;
c->b +=1; c->p+=2;
}
或者
void f(A *c)
{int j;
(*c).b +=1;(* c).p+=2; // .的优先级大于*,所有()不能省。
}

在主函数调用:
f(&a);

这样主函数把a的地址传递给f(),f()对c指向的地址进行操作,也就是改动了a。

回答2:

你这样做是传值,即使函数f执行了,对你定义的结构体变量也没有任何影响,你应该将结构体的地址传给函数,例如:
void f(A *c){
*c.b +=1;
*c.p +=2;
}

main(){
A a={1,2};
f(&a);
printf(……);
}

回答3:

如果你是想让结构a中的元素b+1,p+2
则你可以将子函数中的参数类型设置为引用,或指针
即void f(A &c) 或 void f(A* c)
传的时候,引用,直接传, 指针取地址传