我的意思是,我們可以讓函式回傳指標,如下所示:
#include <stdio.h>
int* sum(int* ptr_1, int* ptr_2){
return (*ptr_1 *ptr_2);
}
int main() {
int x=0, y=0;
scanf("%d %d", &x, &y);
int *ptr_x = &x;
int* ptr_y = &y;
printf("%d", *sum(ptr_x, ptr_y));
return 0;
}
此代碼采用 2 個 int 數字并使用指標列印它們的總和。它在 ssh 上不起作用,但我還是想問一下。
uj5u.com熱心網友回復:
是的,函式可以回傳指標。
你的問題是運算式*ptr_1 *ptr_2產生一個型別的值int,而不是int *(每個*ptr_1和*ptr_2都是ints,所以將它們加在一起會給你一個int值)。
無論該整數值是什么,它都可能不是有效指標(它不是該物件生命周期內物件的地址),并且取消參考無效指標的行為是undefined。你的代碼可能會崩潰,你可能會得到無意義的輸出,可能會發生其他事情。
uj5u.com熱心網友回復:
是的,您可以回傳一個指標,但在這種特定情況下,您不需要,您sum應該只回傳一個 int,而不是指向 int 的指標:
int sum(int* ptr_1, int* ptr_2){
return (*ptr_1 *ptr_2);
}
uj5u.com熱心網友回復:
那個代碼有問題。它回傳兩個 s 的總和int作為沒有意義的指標。
您可以回傳指標,但它們也應該指向某物(或NULL)。取消參考回傳的指標sum(就像您在該printf行中所做的那樣)幾乎肯定會導致未定義的行為。
您的程式的人為但有效的版本:
#include <stdio.h>
int *sum(int *ptr_1, int *ptr_2) {
// `static` makes `result` stored between calls so it isn't destroyed
// when the function returns:
static int result;
result = *ptr_1 *ptr_2;
return &result; // return a pointer pointing at result
}
int main() {
int x, y;
if(scanf("%d %d", &x, &y) != 2) return 1;
int *ptr_x = &x;
int *ptr_y = &y;
printf("%d", *sum(ptr_x, ptr_y));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477696.html
