c++ - 如何以及何时制作指针拷贝

标签 c++ c pointers

在下面的代码中,输出是 20,并解释说在 fun() 中,q 是指针 p 的拷贝.因此,如果我们将 q 更改为指向其他内容,则 p 不受影响。函数复制指针的机制是什么。 为什么 p 在存储 q 的地址时不打印 10。

void fun(int *p)
{
    static int q = 10;
    p = &q;
}   

int main()
{
    int r = 20;
    int *p = &r; 
    fun(p);
    printf("%d", *p);
    getchar();
    return 0;
}

最佳答案

因为函数 fun 按值传递参数。如果要在函数外修改变量,就需要指针。由于要在函数外修改一个int *指针,所以需要一个int **指针:

void fun(int **p)     //here
{
    static int q = 10;
    *p = &q;
}   

int main()
{
    int r = 20;
    int *p = &r; 
    fun(&p);        //and here
    printf("%d", *p);
    return 0;
}

在 C++ 中,您可以以类似的方式使用按引用传递。

关于c++ - 如何以及何时制作指针拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954564/

相关文章:

c++ - 将枚举定义为带有 or 的标志

c - 如何将超出 long long int 范围的字符串转换为整数值

c - 找出指针是否指向堆栈、堆或程序文本?

c++ - 了解堆栈、堆和内存管理

C++:简单方程式的问题?

c++ - 我的 'next offset' 算法中的错误 - C++

c - break in side for loop - 在 break 语句之后不在 for 循环之外打印任何内容

C 二维数组

通过 NULL 指针访问 C++ 静态常量

c++ - 重载转换运算符的后果