【问题标题】:Pointer and address issue in CC中的指针和地址问题
【发布时间】:2022-01-15 20:19:57
【问题描述】:

假设在 main 函数中一个 int 类型变量 x 的值为 20。如果该函数被调用 2 次 foo(&x) ,那么 x 的值是多少?

#include<stdio.h> 
void foo(int *n)
{ 
int *m;
m = (int *)malloc(sizeof(int));
*m = 10;
*m = (*m)*5;
n = m;
}
int main() 
{
    int x = 20;
    foo(&x);
    printf("%d",x);
} 

x 的值不应该是 50,因为我们用 m 初始化 n 的地址,m 的值是 50,但它的值是 20?

【问题讨论】:

  • n = m 一起使local 指针n 指向与m 相同的位置。在foo() 函数中对n 的更改未反映x 中的main() 中;对*n 的更改反映在x 中。您可能想要*n = *m; 代替...并记住free(m); 完成后...和#include &lt;stdlib.h&gt; [并停止转换malloc() 的返回值]。

标签: c pointers


【解决方案1】:

n 指针的地址foo 的本地地址。所以修改foo里面的指针在函数之外没有任何影响。但是当取消引用n 时,pointed-to 值可以更改。

要使x 变为50,foo 函数的最后一行应该是:

*n = *m;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2020-07-06
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多