c - 指针值作为参数

标签 c

应用 void 函数 f 后,printf 中的值没有改变,这让我感到困惑。这是旋转指针的基本内容。确切的问题是:为什么最终值不是 2 而不是 1?

int a=1, b=2;

void f(int* p) {
    p=&b;
}

int main() { 
    int *p=&a;
    f(p);
    printf("%d\n", *p);
}

main 中的 *p 值仍然是 1,这就是让我困惑的地方。

最佳答案

您需要取消引用p并从b中删除&地址运算符

这会将 b 的值分配给 p 指向的地址:

void f(int* p) 
{
    *p = b;
}

为什么它打印 1 而不是例如b 的地址是您分配的:p = &b,它只是将 b 的地址分配给本地指针变量 p。这意味着它在这里不再指向a。但由于这只是一个本地副本,因此它不会更改您在 main() 中传递的 p 的值。

这使得它更加明显:

void f(int* ptr) 
{
    // assign a value
    *ptr = 1337;
}

int main() 
{ 
    int local_integer = 666;

    // prints "666"
    printf("%d\n", local_integer);

    f(&local_integer);

    // prints "1337"
    printf("%d\n", local_integer);
}

关于c - 指针值作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28226661/

相关文章:

char* str ="..."与 char str[] ="..."奇怪的行为

c - 为什么在 C 中释放我重新分配的数组失败?

c - 运行独立共享库时 gdb 不加载符号

c - 灵活的数组成员是否会增加结构的大小?

c - 不使用数组打印相邻数字的差异

c++ - 将 IPv4 地址从 ifaddrs 结构分配给 sockaddr_in 结构

c - 图 C 实现 - 深度优先搜索

c - 使用 libfreenect 编译代码时出现链接器错误

objective-c - 具有整数的数组的数组

python - 让 C 在 USC-2 下启动 Python 解释器