gpt4 book ai didi

c - C 中返回指针的函数

转载 作者:行者123 更新时间:2023-11-30 20:00:20 25 4
gpt4 key购买 nike

我解决了黑客等级的下一个挑战。我在互联网上搜索并找到了一些关于函数指针的内容(我认为这将帮助我解决这个挑战),但我无法解决它。我查看了网站上的讨论,找到了解决问题的方法。它没有通过网站上的所有测试用例,但它对七分之五有效。我以某种方式复制了一些代码,运行它,做了一些更改,运行它等等,直到我得到以下版本。问题是我仍然不明白它是如何以及为什么起作用以及这种方法是否是在这种情况下最好使用的。这是我的代码:

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

int* solve(int a0, int a1, int a2, int b0, int b1, int b2, int *result_size){
static int ar[2] = {0, 0};
*result_size = 2;
ar[0] += a0 > b0;
ar[0] += a1 > b2;
ar[0] += a2 > b2;
ar[1] += b0 > a0;
ar[1] += b1 > a1;
ar[1] += b2 > a2;
return ar;
}

int main() {
int a0;
int a1;
int a2;
scanf("%d %d %d", &a0, &a1, &a2);
int b0;
int b1;
int b2;
scanf("%d %d %d", &b0, &b1, &b2);
int result_size;
int* result = solve(a0, a1, a2, b0, b1, b2, &result_size);
for(int result_i = 0; result_i < result_size; result_i++) {
if(result_i) {
printf(" ");
}
printf("%d", result[result_i]);
}
puts("");


return 0;
}

这是问题的链接:https://www.hackerrank.com/challenges/compare-the-triplets/problem .

我不明白的是int *solve。这是如何运作的?我读过关于函数指针的问题,但我没有明白。为什么我必须使用静态数组?如果数组不是静态的,我的编译器(gcc)会说我无法返回局部变量的地址。另外,在 main 中,int*solve 不应该分配内存吗?

(我应该在此处添加问题的“文本”而不​​是添加链接吗?)

最佳答案

这里没有关于函数指针的内容。 solve 是一个返回 int *(指向 int 的指针)类型的函数。

And why do I must use static array?

返回指向自动局部变量的指针会导致未定义的行为,因此使用static使其成为静态变量。

另一种方法是在函数solve中动态分配空间

int *ar = malloc(sizeof (int) * 2);
memset(ar, 0, sizeof(ar));

关于c - C 中返回指针的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45598857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com