有没有一种方法可以在 C 中创建 return 指针的函数?

is there a way we can make functions that return pointers in C?

我的意思是,我们可以像下面的代码那样创建函数 return 指针:

#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 上不起作用,但我还是想问一下。

是的,函数可以 return 指针。

您的问题是表达式 *ptr_1 + *ptr_2 产生类型 int 的值,而不是 int * (每个 *ptr_1*ptr_2 都是 ints,所以将它们加在一起得到 int 值)。

无论那个整数值是什么,它都可能不是一个有效的指针(它不是对象在该对象生命周期内的地址),并且取消引用无效指针的行为是未定义。您的代码可能会崩溃,您可能会得到无意义的输出,也可能会发生其他事情。

是的,您可以 return 一个指针,但在这种特定情况下,您不需要,您的 sum 应该只是 return 一个 int,而不是指向 int 的指针:

 int sum(int* ptr_1, int* ptr_2){
    return (*ptr_1 + *ptr_2);   
 }

该代码有问题。它 return 是两个 int 的总和,作为一个没有意义的指针。

可以 return 指针,但它们也应该指向 某物(或NULL)。取消引用由 sum 编辑的指针 return(就像您在 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));
}