在 C 中访问双指针

问题描述 投票:0回答:1

假设这些随机方法

void out_param_test(int *in, int **out)
{
    int *temp = calloc(buffer_size, sizeof(int));
    
    for (int i = 0; i < buffer_size; i++)
    {
        temp[i] = in[i] * 2;
    }
    
    *out = temp;
}

主要#1

int main()
{
    srand(42);
    int *output;
    int *one_k_rand_ints = calloc(buffer_size, sizeof(int));

  
    for(int i = 0; i < buffer_size; i++)
    {
        one_k_rand_ints[i] = rand() % 11;        
    }

    out_param_test(one_k_rand_ints, &output); //works like a charm
    
}

但是 主要#2

int main()
{
    srand(42);
    int **output; //Mind the double pointer!
    int *one_k_rand_ints = calloc(buffer_size, sizeof(int));

  
    for(int i = 0; i < buffer_size; i++)
    {
        one_k_rand_ints[i] = rand() % 11;        
    }

    out_param_test(one_k_rand_ints, output); //does not work
    
}

我不明白,我很沮丧,很累。 我不想理解并关注每一个 C 语言的小怪癖。 每次,我参与一个与 C 相关的项目时,我都需要质疑我所知道的一切并从头开始。也许错误在于说教方法。 我已经编码近十年了。我以前以为我懂C,在软弱的时候我觉得它是故意设计成这样的。不是为了伤害我们,而是出于懒惰。因为对我来说,没有明显的理由说明为什么 main#2 不应该工作。抱歉哭了。

如果有人有好的解释,我将不胜感激。

c pointers double
1个回答
1
投票

out
预计是指向要更改的变量的指针。

但是在“main#2”中,您传递了

output
的值,该值是未初始化的。

int *output;

...

out_param_test(one_k_rand_ints, &output);  // Modifies `output`.

相当于

int *output;
int **output_ptr = &output;

...

out_param_test(one_k_rand_ints, output_ptr);  // Modifies `output`.
© www.soinside.com 2019 - 2024. All rights reserved.