gpt4 book ai didi

C函数float参数在函数内部采用不同的值

转载 作者:行者123 更新时间:2023-12-04 14:29:46 25 4
gpt4 key购买 nike

我确定我在这里遗漏了一些明显的东西,但就是无法弄清楚它是什么。在 my repository ,我有一个名为 ddpoly_2.c 的文件,其中包含一个名为“ddpoly2”的函数。我从 tst5.c 中的主函数调用这个函数。如果你看一下 tst5_2.c 中的代码,我给 x 赋值 2,立即打印它,然后将它作为第三个参数传递给“ddpoly2”(根据调用模式应该是什么样的我可以告诉)。然后我立即从函数“ddpoly2”中打印 x。我看到的是以下内容:

x outside: 2.000000
x inside : 0.000000
nc: 2
nd: 3

您可以看到 x 在调用函数之前是 2.000000,但一旦进入函数内部就变成了 0.0000000。我一定在这里遗漏了一些明显的东西,但无法弄清楚它是什么。

附言我使用同一目录中的 makefile 编译代码。

编辑:在此处包括相关代码部分。

调用tst5_2.c中的函数:

int main(int argc, char *argv[])
{
//Used to determine which section gets its results printed.

float c[] = {1,1,1,0,0};
int nc = 2;
float x = 2.0;
float pd[] = {0,0,0,0,0};
int nd = 3;
printf("x outside: %f\n",x);
ddpoly2(c,nc,x,pd,nd);
}

在函数 ddpoly2 中打印它:

#include <stdio.h>

void ddpoly2(float c[], int nc, float x, float pd[], int nd)
{
int nnd, j, i;
float cnst = 1.0;
printf("x inside : %f\n",x);
printf("nc: %d\n",nc);
printf("nd: %d\n",nd);
}

最佳答案

您正在调用一个没有原型(prototype)的函数。自 1999 年以来这是非法的,但您的编译器很有帮助,并允许将其作为与旧 C 标准的兼容性。

C 标准说:

If the expression that denotes the called function has a type that does not include a prototype, the integer promotions are performed on each argument, and arguments that have type float are promoted to double.

正确的解决方法是:

  1. 始终拥有正确的函数原型(prototype)。
  2. 始终启用编译中的所有警告并将它们视为错误。

关于C函数float参数在函数内部采用不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36833308/

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