gpt4 book ai didi

c - *p 包含什么?

转载 作者:行者123 更新时间:2023-11-30 18:29:10 24 4
gpt4 key购买 nike

根据多个源,指针p在取消引用时指向一个值。因此,我们可以说指针包含一个地址作为其值,并且当使用解引用运算符(*)时,将返回该地址处的值。 p>

可以为指针分配一个值,如下所示:

int a = 90;
int *p = &a;

如果我们分配一个指针,它的值如下:

int *p;
*p = 60;

60 分配给 p 并在取消引用时导致未定义的行为,因为 60 不是有效地址。 (根据the answer to this question)。

但是,对于以下代码:

    int a = 90;
int *p = &a;

printf ("p is %d \n",*p);
printf ("a is %d \n", a);
printf ("address is %p \n",p);

*p = 100;

printf ("p is %d \n",*p);
printf ("a is %d \n", a);
printf ("address is %p \n",p);

收到以下输出:

p is 90
a is 90
address is 0028FED8

p is 100
a is 100 address is 0028FED8

即,表达式*p = 100更改a处的值,而不是p包含的值。

怎么办????

最佳答案

*p = &a 甚至无法编译。 p 是一个指向 int 的指针。它目前有一个未定义的值,因此将任何内容分配给 *p 都是未定义的行为,并且很可能会崩溃。然而,即使 p did 指向一个 int,你也只能将一个 int 分配给 *p,&a 是一个指向 int 的指针,而不是一个 int,所以这不能编译。

在第二个示例中,*p = 60,p 的值未定义,因此您尝试将 60 存储到内存中未定义的位置。瞬间崩溃。 p 没有被修改,所以你的解释是错误的。 p 未设置为 60。您不能将 p 设置为 int。您只能将其设置为指向 int 的指针。

正确:

p = &a; 
*p = 60;

关于c - *p 包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40820048/

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