C++ C+中的指针+;(需要概述) int firstvalue=5,secondvalue=15; int*p1,*p2; p1=&firstvalue; p2=&secondvalue; *p1=10//第1行 *p2=*p1//第2行 p1=p2//第3行 *p1=20; 答案1:p1仍然指向firstValue,但firstValue的值现在更改为10 回答2:在第2行中,secondValue被指定为firstValue的值。 回答3:第3行将secondValue指针指定给p1,因此*p1中的任何更改都将反映在secondValue的更改值中

C++ C+中的指针+;(需要概述) int firstvalue=5,secondvalue=15; int*p1,*p2; p1=&firstvalue; p2=&secondvalue; *p1=10//第1行 *p2=*p1//第2行 p1=p2//第3行 *p1=20; 答案1:p1仍然指向firstValue,但firstValue的值现在更改为10 回答2:在第2行中,secondValue被指定为firstValue的值。 回答3:第3行将secondValue指针指定给p1,因此*p1中的任何更改都将反映在secondValue的更改值中,c++,pointers,C++,Pointers,希望这有帮助。 这是否意味着第一个值现在存储10。(第1行) 对 第2行表示p2和p1指向存储在第二个值地址的值。 否。这意味着值p2指向获取p1指向的值的副本。这相当于说secondvalue=firstvalue因为p2指向secondvalue和p1指向firatvalue,并且*p1或*p2中的*在此上下文中访问指针指向的值 我对第3行一无所知。 这表示p1现在将指向p2指向的相同位置。因此,p1和p2都指向secondvalue先忘掉语法,想想那些对象是什么。 内存位置正好有

希望这有帮助。

  • 这是否意味着第一个值现在存储10。(第1行)

  • 第2行表示p2和p1指向存储在第二个值地址的值。
否。这意味着值
p2
指向获取
p1
指向的值的副本。这相当于说
secondvalue=firstvalue因为
p2
指向
secondvalue
p1
指向
firatvalue
,并且
*p1
*p2
中的
*
在此上下文中访问指针指向的值

  • 我对第3行一无所知。

这表示
p1
现在将指向
p2
指向的相同位置。因此,
p1
p2
都指向
secondvalue

先忘掉语法,想想那些对象是什么。 内存位置正好有两个属性:位置和内容

int值;保留一个内存位置(其大小在这里无关紧要)。 第一个值=5;在那里存储一个值

firstvalue是与内存地址关联的标签,&firstvalue是该地址。 指针是一个包含地址的变量,使用“*”解除引用将提供该地址的内容

所以现在

int firstvalue = 5, secondvalue = 15;
int * p1, * p2;

p1 = &firstvalue;  
p2 = &secondvalue; 
*p1 = 10;    //line 1      
*p2 = *p1;  //line 2       
 p1 = p2;   //line 3        
*p1 = 20;          

cout << "firstvalue is " << firstvalue << '\n';
cout << "secondvalue is " << secondvalue << '\n';
return 0;

好吗?

让我们了解什么是指针-指针是地址的存储,它本身不存储值,让我们逐行分析代码

1) 第1行-定义的两个变量(用于保存值的空间)

2) 第2行-定义的两个指针(存储地址的空间)

3) 第4行和第5行-分配给指针p1和p2的变量地址现在p1指向存储值5的位置,p2指向存储值15的位置

4) 第6行-值10存储在p1指向的位置,这意味着变量firstvalue的值从5更改为10

5) 第7行-p1指向的位置值复制到p2指向的位置。现在firstvalue和secondvalue都相同,都是10

6) 第8行-p2指针的值(即secondvalue变量的地址)分配给p1。现在p1和p2都指向secondvalue变量

7) 第9行-将值20赋给指针p1指向的位置,该位置现在是第二个值变量

结果-两个输出都将显示值20,因为两个指针现在都指向secondvalue变量,并且在第9行更新为20

p1 = &firstvalue;  //address of firstvalue stored in pointer p1
p2 = &secondvalue; // same thing for p2 and secondvalue 
*p1 = 10; //line 1: value 10 to variable pointed to by p1 i.e. firstvalue
*p2 = *p1;    //line  2: copy firstvalue to secondvalue 
 p1 = p2;     //line 3:  now both point to secondvalue        
#包括
使用名称空间std;
int main()
{
int firstvalue=5,secondvalue=15;
int*p1,*p2;
p1=&firstvalue;
p2=&secondvalue;

对不起,你的分析不正确

从代码的第一部分开始

以及你对它的分析

p1指向第一个值,p2指向第二个值

你的分析大体上是正确的。我将给出更完整的描述

p1
int*
类型的变量(即指向
int
的指针)赋值
p1=&firstvalue
p1
的值赋值为变量
firstvalue
的地址。这有时意味着指针
p1
被赋值为指向
firstvalue

同样的描述适用于
p2
secondvalue

现在,下一个声明

以及你对它的分析

现在,p1指向值10

这是不正确的。
p1
未指向值
10

语句
*p1=10
将值
10
分配给
*p1
*p1
的结果是对
p1
指向的任何对象的引用(如上所述)是
firstvalue
。因此,赋值
*p1=10
具有将
firstvalue
赋值给值
10
的效果

这就引出了你的第一个问题(尽管你写的问题没有问号)

这是否意味着第一个值现在存储10。(第1行)

如果“第一个值”是指“名为
firstvalue
”的变量”,那么这里的答案是“是”

现在,我们来看下一个代码语句

你的分析呢

据我所知,第2行表示p2和p1指向存储在第二个值地址的值。我是对的还是错的

你在这里完全错了

为了更好地理解,让我们将语句分成几个部分。
*p1
获取对由
p1
指向的变量的引用,该变量是
firstvalue
(其值为
10
).
*p2
获取对由
p2
指向的变量的引用,即
secondvalue
。因此赋值
*p2=*p1
具有与
secondvalue=firstvalue
相同的效果

p1
仍然指向(包含)
firstvalue
的地址。类似地,
p2
仍然指向
secondvalue
。两个变量
firstvalue
secondvalue
都具有值
10

现在我们到3号线

你对它的观察呢

最后,我不知道第三行。所以,需要一些帮助吗
#include <iostream>
using namespace std;

int main()
{
    int firstvalue = 5, secondvalue = 15;
    int * p1, *p2;

    p1 = &firstvalue;
    p2 = &secondvalue;
    cout << "firstvalue address: ," << &firstvalue << "p1 address: ," << p1 << "p1 Value " << *p1 << endl;
    *p1 = 10;    //line 1      
    *p2 = *p1;  //line 2 
    cout <<  "p1 Value " << *p1 << "p2 Value " << *p2 << endl;
    p1 = p2;   //line 3        
    cout << "p1 address: ," << p1 << "p2 address: ," << p2 << endl;
    *p1 = 20;
    cout << "p1 value: " << *p1 << endl;


    return 0;
}
int firstvalue = 5, secondvalue = 15;
int * p1, * p2;

p1 = &firstvalue;  
p2 = &secondvalue;
*p1 = 10;    //line 1  
*p2 = *p1;  //line 2    
p1 = p2;   //line 3  
*p1 = 20;