[英]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.