如何从虚函数返回值?

时间:2018-11-29 06:51:39

标签: c

我有一个这样的void函数,

void Charge(float p[15][11], int cantPol){
    cantPol = 0;

    for(int i = 0; i < 15; i++){        
       for(int j = 0; j < 11; j++){
           &p[i][j]
       }     
       cantPol++;
    }
    cantPol;
}

函数调用 Charge(p, cantPol)

我可以像使用矩阵一样使用指针返回变形值'cantPol'吗?

3 个答案:

答案 0 :(得分:1)

  

我可以像使用矩阵一样使用指针返回变形值'cantPol'吗?

通常是,但是不能使用当前函数声明。 cantPol是“按值”传递的整数。离开该功能后,您在该功能内执行的任何操作都不会起作用。

如果要使用cantPol返回值,则必须将参数列表更改为使用指针:

void Charge(float p[15][11], int *cantPol)

然后,您可以将新值分配给*cantPol,这将在调用方处可见

您还需要调整函数调用。像以前一样简单地传递一个整数将不起作用。您需要传递整数变量的地址。

答案 1 :(得分:0)

函数的传递是两种类型:按值传递和按变量传递。

此处的cantPol被传递了值,表示该函数完成后将不会更改。 基本上是因为它将仅创建变量的副本,而不更改变量的副本。

现在,当您分配一个指针时,您将告诉编译器这是变量(* cantPol)的地址,即cantPol的内存@。

因此,在函数内部,它将转到右边的@并更改内部的值:变量cantPol的值。在这里,您可以恢复cantPol的预期新值。这意味着cantPol被变量传递。

您应该省略最后一行

cantPol; 

没有道理。

所以您应该将虚空更改为:

  void Charge(float p[15][11], int *cantPol)
    {
        *cantPol = 0;
        for(int i = 0; i < 15; i++){        
           for(int j = 0; j < 11; j++){
               &p[i][j]
           }     
           (*cantPol)++;
        }
        printf("\n");
        printf("\n");
        printf("%i\n",*cantPol);
    }

不更改函数内部的任何内容。

返回cantPol的另一种方法是将void转换为int函数,这意味着您将返回计算出的值。请注意,这里没有使用指针,但是仍然可以获取计算值。

int  Charge(float p[15][11], int cantPol)
{
   cantPol = 0;

    for(int i = 0; i < 15; i++){        
       for(int j = 0; j < 11; j++){
           &p[i][j]
       }     
       cantPol++;
    }
    printf("\n");
    printf("\n");
    printf("%i\n",cantPol);

    return cantPol;
}

答案 2 :(得分:-1)

将其从void函数更改为int。最后一行应显示为return cantPol;