假设这些随机方法

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;
}

Main#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
    
}

但 Main#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.在一个脆弱的时刻,我认为这是故意设计的.不是为了伤害我们,而是出于懒惰.因为对我来说,没有明显的原因,为什么主要#2不应该工作.抱歉,我哭了.

如果有人能给出一个好的解释,我将不胜感激.

推荐答案

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`.

C++相关问答推荐

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

为什么静态说明符为内联函数生成外部定义?

在struct中调用函数,但struct在void中 *

如何创建由符号组成的垂直结果图形?

DPDK-DumpCap不捕获端口上的传入数据包

将指针作为参数传递给函数

难以理解Makefile隐含规则

在句子中转换单词的问题

C整型和_泛型.哪些类型是兼容的?

C堆栈(使用动态数组)realloc内存泄漏问题

Tic-tac-toe:从文件加载存储

类型定义 struct 与简单的类型定义 struct

Wcstok导致分段故障

在吉陀罗中,_2_1_和CONCAT11是什么意思?

无算术运算符和循环的二进制乘法

如何编写postgresql支持函数

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

关于不同C编译器中的__attribute__支持

为什么写入关闭管道会返回成功

段错误try 访问静态字符串,但仅有时取决于构建环境