我一直在尝试一些 Codility 演示问题来找点乐子,但我被困在以下简单的指针问题上(doh!)。我想知道是否有人可以帮助我?
我的代码是:
struct Results solution(int N, int A[], int M) {
struct Results result;
N = 2;
const int N_const = N;
int counter[N_const];
counter[0] = 2;
counter[1] = 4;
result.C = counter;
result.L = 2;
return result;
}
结构定义为:
struct Results {
int * C;
int L;
};
但是,它返回:
Returned value: [136343560, 1]
不是我期待的 [2, 4]
现在,真正让我感到困惑的是以下工作:
struct Results solution(int N, int A[], int M) {
struct Results result;
int counter[2];
counter[0] = 2;
counter[1] = 4;
result.C = counter;
result.L = 2;
return result;
}
正确返回:
Returned value: [2, 4]
但以下不是:
struct Results solution(int N, int A[], int M) {
struct Results result;
int counter[10000];
counter[0] = 2;
counter[1] = 4;
result.C = counter;
result.L = 2;
return result;
}
错误返回:
Returned value: [0, 0]
我觉得我遗漏了一些明显的东西。任何人都可以阐明这一点吗?
提前致谢
最佳答案
counter
数组在堆栈上,因此当函数返回时它“不再存在”(也就是超出范围)。返回结构中的计数器指向堆栈中的某个空间,其中的内容可以随时更改。
有很多很好的描述可以更深入地探讨这个问题。
关于c - C 中的 Codility 挑战问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229450/