c - C 中的 Codility 挑战问题

标签 c pointers

我一直在尝试一些 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/

相关文章:

c - 从 .txt 文件中读取名称并将其添加到链接列表中

c - 从默认情况重定向到 switch 语句

c++ - 在同一指令中引用和取消引用

pointers - 如何用 Rust 编写一个合适的 map 函数?

c - *列表和**列表之间的区别

c - Coccinelle 中的指针问题

c++ - 在应用程序文件夹中为 C/C++ 安装库 "IGRAPH"

c++ - 存储指向 map 中包含的对象的指针

c - 优化二叉树会出现奇怪的重复错误

c - 主循环不正常退出