Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 两个指针可以使用相同的地址吗?(代码说明)_C_Pointers - Fatal编程技术网

C 两个指针可以使用相同的地址吗?(代码说明)

C 两个指针可以使用相同的地址吗?(代码说明),c,pointers,C,Pointers,有人能给我解释一下这个代码吗?特别是第八行,我认为它在指针2中分配指针1的地址,这会使指针2指向值1吗 请有人帮帮我。谢谢。ptr2=ptr1将ptr1的值(即i1的地址)分配给ptr2。这使得ptr2指向与ptr1指向相同的对象,即变量i1。ptr2指向的位置中的值确实是1,但是说ptr2指向值1似乎很奇怪。ptr2的值是一个内存位置,该位置当前包含一组位(当解释为int时)表示值1您正在做的是将ptr1的值写入ptr2的地址中。可视化:你在ptr1中有一个箭头,上面写着“如果你需要value

有人能给我解释一下这个代码吗?特别是第八行,我认为它在指针2中分配指针1的地址,这会使指针2指向值1吗


请有人帮帮我。谢谢。

ptr2=ptr1
ptr1
的值(即
i1
的地址)分配给
ptr2
。这使得
ptr2
指向与
ptr1
指向相同的对象,即变量
i1
ptr2
指向的位置中的值确实是
1
,但是说
ptr2
指向值
1
似乎很奇怪。
ptr2
的值是一个内存位置,该位置当前包含一组位(当解释为int时)表示值
1

您正在做的是将
ptr1
的值写入
ptr2
的地址中。可视化:你在
ptr1
中有一个箭头,上面写着“如果你需要value1,你可以在那里找到它”。在复制之后,
ptr2
现在还有一个箭头,上面写着“如果您需要value1,您可以在那里获得它”。因此,您确实正确地假设
ptr2
指向值
1

是的,多个指针可以指向同一位置,这种情况称为。虽然您提到的这行代码确实使
ptr2
指向值1,但更重要的是,它指向
i1
的存储,就像
ptr1
一样。因此,此时您有三个不同的名称可以访问
i1
*ptr1
*ptr2
i1
本身。因此,最后两行确实具有顺序依赖关系,并且程序在
i1
i2
中都以3结尾

理解C语言中的指针是解决问题的方法

int i1;
int i2;

int *ptr1;
int *ptr2;

i1 = 1;
i2 = 2;

ptr1 = &i1;
ptr2 = ptr1;

*ptr1 = 3;
i2 = *ptr2;
指针基本上是一个变量,其值(R值)是另一个变量的地址(L值)

变量有一个L值(存储它的内存地址)和一个R值(数据值)

所以

表示您正在将ptr1的R值分配给ptr2的R值。
Ptr1的R值包含i1的L值,因此:

ptr2 = ptr1;

cout
ptr2=ptr1
ptr1
的值(即
i1
的地址)分配给
ptr2
。网上有许多指针教程解释指针如何工作以及幕后发生了什么。
ptr2 = ptr1;
cout << ptr2;  /* print i1's L-value (a memory address) */
cout << *ptr2; /* print 1, that is i1's R-value */