需要帮助来理解指针语义

时间:2011-12-22 01:35:21

标签: c pointers

请参阅以下代码和我对结果的解释。

void f (int * p, int * q)
{
    p = q;
    *p = 2;
}

int i = 0;
int j = 1;

int main ()
{
    f(&i, & j);

    printf("%d %d\n", i, j);

    return 0; 
}

我们有两个全局变量ij,我们将这两个变量的指针传递给函数f。当我们执行p = q时,我们实际上忽略了i的引用,我们得到两个指针,即pq都指向j。然后当我们*p = 2时,我们实际上将j的值更改为2

但是,由于我们在步骤i中丢失了p = q的引用,因此在主程序中,打印的i的值是全局变量{{1 }}。因此,我们得到的结果为0i = 0

请告诉我这是否是一个正确的解释...

现在另一个问题是,当我们在函数f中执行j = 2时,它是否会创建内存泄漏,因为先前由p指出的值将无法访问。

1 个答案:

答案 0 :(得分:0)

在函数中执行p = q只会更改局部变量p,因此i不受影响,&i中的main仍然与之前相同调用功能。此外,如果您使用malloc()calloc()而没有相应的free()(包括等效使用realloc()),则只能造成内存泄漏。

否则,您的解释是正确的。