我必須定義一個函式來檢查除法操作是否安全。這是我寫的:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stddef.h>
bool safe_division(const int *x, const int *y, int *result){
if(!(((&x || &y || &result) != NULL) || (*y == 0))){
return false;
} else{
*result = *x / *y;
return true;
}
}
int main(void){
int x = 2;
int y = 1;
int result = 2;
int *px = &x;
int *py = &y;
int *presult = &result;
if(safe_division(px, py, presult)){
printf("why hello there\n");
}
return EXIT_SUCCESS;
}
問題是我從編譯器得到的錯誤。我知道問題出在 safe_division 函式中的 if 陳述句中。我該如何解決這個問題?
uj5u.com熱心網友回復:
變數的地址總是非空的,所以檢查它是否為空是沒有意義的。您真正想要的是檢查指標變數的值是否為 NULL。
此外,即使解決了這個問題,這也不會像您認為的那樣:
(&x || &y || &result) != NULL
這首先執行指標值的邏輯或運算,生成值 0 或值 1,然后檢查該值是否為 NULL。您在這里想要的是將每個指標值分別與 NULL 進行比較,然后使用邏輯 OR。
if ((x == NULL) || (y == NULL) || (result == NULL) || (*y == 0)) {
uj5u.com熱心網友回復:
||指標之間的邏輯 or ( ) 并不像您想象的那樣,它實際上執行 OR 之間的值,然后將單個值與NULL
你需要這樣寫:
if ((x == NULL) || (y == NULL) || (result == NULL) || (*y == 0)) {
更短的方法是:
if (!x || !y || !result || !*y) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/375253.html
下一篇:在指標地址中存盤值的問題
