c语言求救啊....求详解

2025-02-26 03:07:28
推荐回答(3个)
回答1:

这其实是C语言中值传递和地址传递的问题.
来看你main()中的这几行代码:

A a={1,2}; //这里你给结构体a赋初值
f(a);
printf("%d,%d\n",a.b,a.p);//你打印a成员值

你认为中间的这个函数能改变a的成员值?
其实你调用f(a)并不是真的把a传进这个函数,而是相当于复制了一个与a相同的值a',将这个
值等于a的a'传给函数并计算,所以,实现上a的值并没有改变。这就是所谓的值传递。

解决你的问题:如果你想改变a的值,也就是说,你想把真正的a传给函数,而非传一个复制品,
你就应该把“储存变量a的这个内存地址”传给函数。因为变量的地址是不变的,相当于身份
证一样。你改变了这个地址上对应的值,当然也就改变了变量a的值。明白?

代码中,你要修改
void f(A c) 的参数,上面说了,因为要传地址,所以这个函数参数要改成*A *c(c语言中指针类型和地址差不多是一个意思,所以,这个参数类型要是“指针”型),同样,之前函数定义中,
凡是有c的地方,都要改成*c(这里相当于取值,C是一个地址,*C就是这个地址上的值)。

void f(*A *c)
{
(*c->b)+= 1;
(*c->p)+= 2;
}

你把这个函数改成如上,就OK了。

回答2:

typedef struct {int b,p;}A;
void f(A *c)
{
int j;
c->b+=1;
c->p+=2;
}
main()
{
int j;
A a={1,2};
f(&a);
printf("%d,%d\n",a.b,a.p);
}

记得值传递,和指针传递。

回答3:

两种方法
1.C++的引用
#include
typedef struct
{
int b,p;
}A;

void f(A &c)
{
c.b+=1;
c.p+=2;
}
int main()
{
A a={1,2};
f(a);
printf("%d,%d\n",a.b,a.p);
return 0;
}

2.址传递
#include
typedef struct
{
int b,p;
}A;

void f(A *c)
{
c->b+=1;
c->p+=2;
}
int main()
{
A a={1,2};
f(&a);
printf("%d,%d\n",a.b,a.p);
return 0;
}