c - 函数参数中的整数双指针

标签 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 只是停止。 这个简单的代码可能会出现什么问题?

最佳答案

我们可以重写

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

关于c - 函数参数中的整数双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52915095/

相关文章:

C: 用 fgets() 替换 gets() 时出错

加载 OpenSSL 的方法的正确顺序?

c - 如何调用简单的 Bool 函数并打印

pointers - atomic.AddInt64 导致无效的内存地址或零指针取消引用

c - 从设备属性读取时调试在 container_of 上失败的简单字符驱动程序

坐标传递给 XDrawImageString()

python - 为什么 python `any` 返回一个 bool 而不是值?

r - 应该在函数之前还是在函数内部加载数据集?

c++ - 资源管理- vector 和指针

pointers - 如何使用 LuaJIT FFI 创建指向现有数据的指针?