2015-10-20 30 views
-1

我想在C编程中使用指针创建一个void函数。我创建了以下功能与指针的工作原理: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] 

很抱歉,如果我做一些愚蠢的,但我不知道什么是错的,当我查nge int为void。我知道void没有任何意义,但我希望我的代码返回void。可能吗? 谢谢

+3

删除'return * total;'行,可以用'return;'替代。如果你想让函数不返回任何东西,你实际上不需要返回... – Kninnug

+2

int * total'没有被初始化 – Matt

回答

1

你正在做几件事情错误,并且显然让自己困惑于某些概念。

  1. 声明为void f()的函数无法返回值。这与指针无关。当您将函数更改为“返回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,因此上述所有无关紧要:-)
0

这是因为行:return * total; 您不会在void函数中返回值。

0

void返回类型意味着你不能返回任何东西。从函数中删除return *total;以允许编译

0

你可以简单的写你的函数类似这样的 -

void function_1(int *num1, int *num2,int *total){ //void function does not return anything 
    *total = *num1/*num2; 
    } 

而且在main这样称呼 -

function_1(&numerator, &denominator, &finalAnswer); 

然后打印这些值。

Check link to see working code.

0

正如其他人所说,有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);