我有一个这样的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'吗?
答案 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;