C 理解指针的使用

c++ the use of understanding pointers

本文关键字:指针      更新时间:2023-10-16

我正在阅读C 指针。http://www.cplusplus.com/doc/tutorial/pointers/

#include <iostream>
using namespace std;
int main ()
{
    int firstvalue = 5, secondvalue = 15;
    int * p1, * p2;
    p1 = &firstvalue;  // store the address of firstvalue = 5
    p2 = &secondvalue; // store the adrees of secondvalue = 15
    *p1 = 10;          // p1 = 10 
    *p2 = *p1;         // p2 = 10
    p1 = p2;           // p1 = 10
    *p1 = 20;          // p1 = 20
    cout << "firstvalue is " << firstvalue << 'n';
    cout << "secondvalue is " << secondvalue << 'n';
   return 0;
}

从我的理解中,输出应为

   firstvalue is 20
   secondvalue is 10

但是当我查看答案时,它会反过来

   firstvalue is 10
   secondvalue is 20

我对指针不太了解。请帮助

p1 = p2;           // p1 now points to where p2 was pointing at
*p1 = 20;          // *p2 = secondvalue = 20

代码// p1 = 10等中的注释都是谎言。使用firstvaluesecondValue改写它们,以免它们撒谎。

指针本身 p1p2从不 10或20。它们是变量的地址,通常在十六进制符号中表达的较长值,您对您不感兴趣。因此,// p1 = 10等表单等的每个评论都是错误的。

正如其他人所提到的,要理解这一行:

*p1 = 10;

弄清楚 p1指向的位置:

* p1 = 10 ;   // firstvalue = 10

并遵循指针。

int firstvalue = 5, secondvalue = 15;
int * p1, * p2;
p1 = &firstvalue;  // store the address of firstvalue = 5
p2 = &secondvalue; // store the adrees of secondvalue = 15

*p1 = 10;          // value of p1 = firstValue = 10  
*p2 = *p1;         // value of p2 = secondvalue = 10
p1 = p2;           // p1 points to memory location refered by p2 which is secondValue. 
*p1 = 20;          // p1 = secondvalue = 20 

因此,在所有操作的末尾,firstValue = 10;第二值= 20