簡體   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