gpt4 book ai didi

c - 如何使用指针返回 2 个值? (见下面的代码)

转载 作者:行者123 更新时间:2023-11-30 19:43:46 26 4
gpt4 key购买 nike

float roots(float *p,float *r,int j);
main()
{
float a[3],i;
float root;
printf("enter three value");
scanf("%f%f%f",&a[0],&a[1],&a[2]);
for(i=0;i<2;i++)
{
roots(&a,&root,i);
printf("%f\n",root);
}
}
float roots (float *p,float *r,int j)
{
if(j==0)
{
*r=(- *(p+1)+sqrt((*(p+1) * *(p+1))-4*(*p) * *(p+2)))/2*(*p);
return(*r);
}
if(j==1)
{
*r=(- *(p+1)-sqrt((*(p+1) * *(p+1))-4*(*p) * *(p+2)))/2*(*p);
return(*r);
}

}

在下面的程序中,我通过在函数 roots() 中传递两个指针和一个 int 值来计算方程的根,但是如何通过仅传递两个指针而不在函数 roots() 中传递 int 来返回这两个根?

不要使用struct来求解二次方程的根。

我在函数中使用一个指针变量来传递方程的系数,并使用另一个指针变量来返回根。

最佳答案

您在代码中混合了“值”、“指针”和“数组”概念:

在这一行

    roots(&a,&root,i);

由于您想要访问其元素,因此无需使用 (&) 运算符的地址来传递数组 a,因为“a”已经是数组 a 的第一个元素的标签,即 a 已经包含 < em>数组第一个元素的地址。使用 &a 实际上传递的是 reference to the whole array :

In Standard C, &arr yields a pointer, of type pointer-to-array-of-T, to the entire array.

For a simple array

int a[10];

a reference to a has type pointer to int,'' and &a is pointer to array of 10 ints.''

在函数的定义中

float roots (float *p,float *r,int j)

混合使用解引用运算符和乘法运算符,这会使代码的可读性降低并且更容易出现错误:

    *r=(- *(p+1)+sqrt((*(p+1) * *(p+1))-4*(*p) * *(p+2)))/2*(*p);

您似乎正在尝试实现 quadratic formula ,但这并不是立即显而易见的。

最后,在函数的定义中,您还使用解引用运算符返回 r 值的副本,但结果被 main 丢弃,并且函数对指针进行操作:不需要 return 语句,您可以更改返回数据类型为 void 并删除。

return(*r);

从代码中,由于对通过取消引用指针访问的值进行的任何操作都相当于直接访问实际保存该值的变量,即,由于您将 &root 作为参数传递,所以涉及 *r 的任何操作都已经更新了根变量。

关于c - 如何使用指针返回 2 个值? (见下面的代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29192926/

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