【问题标题】:Global Function not returning the correct values全局函数未返回正确的值
【发布时间】:2021-10-22 21:26:45
【问题描述】:

我正在尝试使用全局函数编译向量的第一个非零值。但是当我编译时,它返回原始值 k1=k2=1,而它应该是 k1=0 和 k2=2。不?我的代码如下所示:

#include<math.h>
#include<stdlib.h>

int primeiro(float vec[], int f)
{
  f=0;

    while(vec[f]==0)
    {
     f++;
    }

 return f;
}


int main()

{
float poli1[4]={1,2,3,4}, poli2[4]={0,0,5,6};
int k1=1, k2=1, i;

printf(" \n");

for(i=0; i<4; i++)
  {
     printf("%g\t", poli1[i]);
  }

printf("\n \n");

for(i=0; i<4; i++)
  {
     printf("%g\t", poli2[i]);
  }

printf("\n \n");

primeiro(poli1, k1);
printf("%d \n", k1);
primeiro(poli2, k2);
printf("%d \n", k2);
                
}```

【问题讨论】:

  • 您没有存储对primeiro 的调用的返回值,那么您希望它如何更改任何变量?另外,请记住,C 函数 args 是 按值传递的 - 函数 args 是函数的本地变量,在函数内部更改它对调用者的变量值没有影响。
  • 也许你想要k1 = primeiro(poli1, k1);?或者将第二个 arg 作为指针传入,以便它可以取消引用并修改原始变量值。
  • ooo 我想我明白了,谢谢。

标签: c function global-variables


【解决方案1】:

您需要使用传递引用(指针)来更改主代码中 k1 的值(它退出的范围)或将 primeiro 的 inovcation 分配给 k1 9k1 = primeiro(poli1, k1);)这实际上是从中返回值。

修改后的实现:

#include<math.h>
#include<stdlib.h>

int primeiro(float vec[], int f)
{
  f=0;

    while(vec[f]==0)
    {
     f++;
    }

 return f;
}


int main()

{
float poli1[4]={1,2,3,4}, poli2[4]={0,0,5,6};
int k1=1, k2=1, i;

printf(" \n");

for(i=0; i<4; i++)
  {
     printf("%g\t", poli1[i]);
  }

printf("\n \n");

for(i=0; i<4; i++)
  {
     printf("%g\t", poli2[i]);
  }

printf("\n \n");

k1 = primeiro(poli1, k1);
printf("%d \n", k1);
k2 = primeiro(poli2, k2);
printf("%d \n", k2);
            

【讨论】:

    【解决方案2】:

    你永远不会改变k1k2,所以它们有它们原来的价值。

    也许

    primeiro(poli1, k1);
    primeiro(poli2, k2);
    

    本来就是

    k1 = primeiro(poli1, k1);
    k2 = primeiro(poli2, k2);
    

    【讨论】:

    • 是的,它按你说的那样工作,而且效果更好,我不需要每次都执行该函数呵呵@ikegami
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多