[英]How does a void function in C works with pointers?
我正在尝试在 C 编程中创建一个使用指针的 void 函数。 我创建了以下使用指针的函数:
#include <stdio.h>
int function_1(int *num1, int *num2) {
int *total;
*total = *num1 / *num2;
return *total;
}
int main(void) {
int numerator;
int denominator;
int finalAnswer;
printf("Numerator: ");
scanf("%d", &numerator);
printf("Denominator: ");
scanf("%d", &denominator);
finalAnswer = numerator / denominator;
printf("%d / %d = %d \n", numerator,denominator,finalAnswer);
}
这个程序没有问题,但是当我改变第一行之后
#include <stdio.h>
对此: void function_1(int *num1, int *num2) {
当我尝试编译我的代码时出现以下错误:
prog1.c: In function ‘function_1’:
prog1.c:7:2: warning: ‘return’ with a value, in function returning void [enabled by default]
对不起,如果我做了一些愚蠢的事情,但是当我将 int 更改为 void 时,我不知道出了什么问题。 我知道 void 没有任何意义,但我希望我的代码以 void 返回。 是否可以? 谢谢
您做错了几件事,并且显然将自己与某些概念混淆了。
void f()
函数不能返回值。 这与指针无关。 当您将函数更改为“return void
”时,您不能使用return value;
在函数内部(或者更准确地说,无论您返回什么值都不会去任何地方,这就是为什么您有编译时警告的原因)。int *total
永远不会分配任何地址,使用它 ( *total = *num1 / *num2;
) 是危险的,并且会产生未定义的行为。 您根本不需要total
成为指针类型。 做就是了:
int function_1(int *num1, int *num2) { int total; total = *num1 / *num2; return total; }
function_1
,因此以上所有内容都无关紧要:-)这是因为这一行: return *total; 您不在 void 函数中返回值。
void 返回类型意味着你不能返回任何东西。 删除return *total;
从允许编译的函数
你可以像这样简单地编写你的函数 -
void function_1(int *num1, int *num2,int *total){ //void function does not return anything
*total = *num1 / *num2;
}
在main
调用它是这样的 -
function_1( &numerator, &denominator, &finalAnswer);
然后打印值。
正如其他人所提到的,具有void
返回类型的函数不能返回任何内容。 因此,您需要删除行return *total;
或者只是打电话return;
.
然而,这里还有一个问题:
int *total;
*total = *num1 / *num2;
您将total
声明为指向int
的指针,但您从未为该指针赋值。 然后您尝试取消引用未初始化的指针,这会导致未定义的行为。
你真的不需要参数或返回值的指针,所以如果你想返回一个int
你可以这样做:
int function_1(int num1, int num2) {
int total;
total = num1 / num2;
return total;
}
如果您希望函数具有void
返回类型并将值发送回参数,您可以这样做:
void function_1(int num1, int num2, int *total)
{
*total = num1 / num2;
}
并这样称呼它:
function_1(numerator, denominator, &finalAnswer);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.