繁体   English   中英

C 中的 void 函数如何处理指针?

[英]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 返回。 是否可以? 谢谢

您做错了几件事,并且显然将自己与某些概念混淆了。

  1. 声明为void f()函数不能返回值。 这与指针无关。 当您将函数更改为“return void ”时,您不能使用return value; 在函数内部(或者更准确地说,无论您返回什么值都不会去任何地方,这就是为什么您有编译时警告的原因)。
  2. 如果将变量定义为指针类型,则需要在使用该地址之前为其分配有效的内存地址。 int *total永远不会分配任何地址,使用它 ( *total = *num1 / *num2; ) 是危险的,并且会产生未定义的行为。
  3. 您根本不需要total成为指针类型。 做就是了:

     int function_1(int *num1, int *num2) { int total; total = *num1 / *num2; return total; }
  4. 您没有在任何地方使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM