函数参数中的整数双指针

时间:2018-10-21 12:00:41

标签: c function pointers

到目前为止,我对指针的了解是: 指针指向变量的地址

int a = 0 ;
int *p = &a ;

并且双指针指向指针变量的地址

int *b = &a ;
int **c = &b ;

据我所知正确的执行以下代码应该没有问题:

#include<stdio.h>

void reference(int **input)
{
    **input = 963;
}

int main(void)
{
    int* value;

    reference(&value);

    printf("%d\n", *value);

    system("PAUSE");
    return 0;
}

在此代码中,我希望在控制台中看到“ 963”。 当我执行代码时,构建成功,但cmd停止。 这个简单的代码可能会出现什么问题?

2 个答案:

答案 0 :(得分:4)

我们可以重写

int* value;
reference(&value);

不带功能,给

int* value;
int **input = &value;
**input = 963;

因为*inputvalue,所以整个事情等同于

int* value;
*value = 963;

这是错误的,因为value未初始化。取消引用未初始化的指针具有未定义的行为。

修复:

int x;
int *value = &x;
reference(&value);

即将value指向可以存储963的某个地方。

答案 1 :(得分:2)

问题在于value是一个指针,它没有指向任何东西,而是悬空的。您需要先进行设置。

int foo;
int* value;
value = &foo;

现在它可以正常工作而不会崩溃。您需要在堆栈上(本地变量)或在堆上(与malloc分配)中存放数据。