gpt4 book ai didi

c - 理解指针在 C 中的用法

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:57 25 4
gpt4 key购买 nike

在我写的代码中:

   int *p1=&a,**p3=&p1;

将 p3 作为参数传递给函数“change”后,p1 得到 改了...然后main函数打印了p1,p1取值 在双指针 p3(如 int **p3=&p1 所写),但它不占用地址 一个(int * p1 =&a)。

这意味着 p1 的值将是 p3 的值,而不是 变量'a'的地址?为什么双指针'p3'的值 会考虑??

为什么不是指针存储的地址(&a)的值?谁能澄清 这两行....

   int *p1=&a;

int **p3=&p1;

我理解双指针的概念,但需要澄清 关于这两行...

#include<stdio.h>   
void main()
{
int a=2,b=3;
int *p1=&a,*p2=&b,**p3=&p1;
printf("p1=%d, p2=%d, p3=%d\n",p1,p2,p3);
change(p3,p2);
printf("p1=%d, p2=%d, p3=%d\n",p1,p2,p3);
printf("p1=%d\n",p1);
printf("a=%d, b=%d\n",*p1,*p2);
}
void change(int **x,int *z)
{
*x=z;
printf("p1=%d, p2=%d\n",*x,z);
printf("a=%d, b=%d\n",**x,*z);
}

输出:

   p1=-840577016,p2=-840577012,p3=-840577008

p1=-840577012,p2=-840577012

a=3,b=3

p1=-840577012,p2=-840577012,p3=-840577008

p1=-840577012

a=3,b=3

最佳答案

因为你在这一行改变了p1*x=z;

为了进一步解释你做了这件事

change(p3,p2)

现在 p3 的地址为 p1。然后你只是通过分配给它别的东西来改变它..

其他东西只不过是 b 的地址。

void change(int **x,int *z)

x 包含 p1 的地址。z 包含 b 的地址。

然后你说无论x 的内容是什么 - 去那里写下z 的内容。 z 包含 b 的地址。所以现在我们把p1-s的内容改成b的地址。

..但在函数中 p1 发生变化后,它主要会忽略 int *p1=&a 行吗??

好吧,OP - 你认为 p1 会在这里改变吗?

int *p1 = &a;
p1 = &b;

我们终于将b 的地址分配给了p1。先前写入的值被 os 覆盖。

什么都没有被忽略 - 程序按照它所说的去做

另外一点

使用%p打印这样的指针

printf("p1=%p, p2=%p, p3=%p\n", (void*)p1, (void*)p2, (void*)p3);

关于c - 理解指针在 C 中的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47835865/

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