【发布时间】:2017-08-09 19:10:44
【问题描述】:
我解决了黑客等级的下一个挑战。我在互联网上搜索并找到了一些关于函数指针的东西(我认为这将帮助我解决挑战),但我无法解决它。我查看了网站上的讨论,并找到了解决问题的方法。它没有通过网站上的所有测试用例,但它适用于 7 个测试用例中的 5 个。我以某种方式复制了一些代码,运行它,进行了一些更改,运行它等等,直到我得到以下版本。问题是我仍然不明白它是如何工作以及为什么工作,以及这种方法是否在这种情况下是最好的。这是我的代码:
#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。这是如何运作的?我在 SO 上阅读了有关函数指针的问题,但我没有得到它。为什么我必须使用static 数组?如果数组不是静态的,我的编译器(gcc)说我不能返回局部变量的地址。同样在 main 中,int* solve 不应该分配内存吗?
(我应该在这里添加问题的“文本”而不是添加链接吗?)
【问题讨论】:
-
这是一个返回指针的函数。这里没有函数指针。
-
相信如果你从未使用过/见过函数指针,那么第一次看到函数指针会比你在这里看到的要奇怪得多。
-
代码挑战网站(无论是否正式比赛)的想法是通过自己或研究解决问题(而不是通过从“告诉”网站复制代码)。 “我以某种方式复制了一些代码”,但想法是编写您自己的代码,而不是问如何解决您的不良抄袭。请询问有关 C 的具体问题。
-
我投票结束这个问题,因为你不理解你抄袭的代码。
-
@WeatherVane 我的问题不是解决挑战。它专门针对 C。我主要不是对解决挑战感兴趣。我有兴趣了解我提出的问题。我有没有问过“如何解决挑战?”?我使用挑战是因为我想学习,但有时我不知道我应该学习什么。我不学习是因为我想解决这些挑战。我正在投票回答这个问题。 SO是否有自己的学习方式,而我在这种情况下使用的学习方式是错误的?让我知道。谢谢!
标签: c pointers function-pointers