gpt4 book ai didi

c - 指针指向的值在第一次取消引用后发生变化

转载 作者:太空狗 更新时间:2023-10-29 15:50:24 25 4
gpt4 key购买 nike

我正在尝试在“init_pointer”函数中初始化整数指针“p”。函数返回后,我将指针和取消引用的值打印两次。第一个取消引用打印预期值 100,但第二个取消引用打印随机值。

#include<stdio.h>

void init_pointer(int d, int **c){
(*c) = &d;
}

int main(){
int x = 100;
int *p;

init_pointer(x,&p);

printf("pointer = %p, value = %d\n",p,*p);
printf("pointer = %p, value = %d\n",p,*p);

return 0;
}

输出:

pointer = 0x7fffb4d4b9ac, value = 100
pointer = 0x7fffb4d4b9ac, value = 32567

最佳答案

函数已将值复制到 init_pointer(int d, int **c) 中的新局部变量

dinit_pointer 的局部变量,它由 mainx 传递。 xd 都是地址不同的独立变量。在 init_pointer 之外访问 d 的地址将导致 Undefined Behavior .

像这样调用函数是没有意义的,但这会起作用:

void init_pointer(int *d, int **c)
{
(*c) = d;
}

int main()
{
int x = 100;
int *p;

init_pointer(&x,&p);

printf("pointer = %p, value = %d\n",p,*p);
printf("pointer = %p, value = %d\n",p,*p);

return 0;
}

输出:

pointer = 0xbfde132c, value = 100
pointer = 0xbfde132c, value = 100

关于c - 指针指向的值在第一次取消引用后发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27814885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com