我解決了黑客級別上的下一個挑戰。我搜索了互聯網,發現了一些關於函數指針的信息(我認爲這些信息將幫助我解決挑戰),但是我無法解決它。我查看了網站上的討論,並找到了解決問題的方法。它沒有通過網站上的所有測試用例,但它在7箇中有5個。我以某種方式複製了一些代碼,運行它,進行了一些更改,運行它等等,直到獲得以下版本。問題是,我仍然不明白它是如何工作的,以及這種方法在這種情況下最好用。這是我的代碼:函數返回指針C
#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
。這是如何運作的?我讀過關於函數指針的問題,但我沒有得到它。爲什麼我必須使用static
數組?如果數組不是靜態的,我的編譯器(gcc)說我不能返回局部變量的地址。還主要不應該int* solve
有內存分配?
(我應該在這裏增加了問題的「文本」,而不是添加的鏈接?)
這是一個返回指針的函數。這裏沒有函數指針。 –
相信如果你從來沒有使用/看過函數指針,首次看到一個函數指針會比你在這裏看到的更奇怪。 – WhozCraig
代碼挑戰網站(無論是否正式比賽)的想法是自己或通過研究解決問題(但不是通過複製「告訴」網站的代碼)。 「我以某種方式複製了一些代碼」,但想法是編寫自己的代碼,而不是要求如何解決你的剽竊問題。請問一個關於C的具體問題。 –