有没有一种方法可以在 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
都是 int
s,所以将它们加在一起得到 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));
}
我的意思是,我们可以像下面的代码那样创建函数 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
都是 int
s,所以将它们加在一起得到 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));
}