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;
我对此代码的分析: p1指向第一个值,p2指向第二个值。现在,p1指向值10.我的第一个问题是:
这是否意味着第一个值现在存储10.(第1行)
据我所知,第2行意味着p2和p1指向存储在第二个值的地址处的值。我是对还是错?
最后,我对第3行没有任何线索。所以,也需要一些帮助。
答案 0 :(得分:0)
答案1:p1仍指向firstValue,但firstValue的值现在更改为10 答案2:在第2行中,secondValue被赋值为firstValue。 答案3:第3行将secondValue的指针分配给p1,因此* p1中的任何更改都将反映在secondValue的更改值中。
希望这有帮助。
答案 1 :(得分:0)
是
没有。这意味着值p2
指向获取p1
指向的值的副本。这相当于说secondvalue = firstvalue;
,因为p2
指向secondvalue
而p1
指向firatvalue
,而*
指向*p1
或者在此上下文中*p2
访问指针指向的值。
这表示p1
现在指向p2
指向的同一个地方。因此,p1
和p2
都指向secondvalue
。
答案 2 :(得分:0)
忘记一秒钟的语法并思考这些对象是什么。 内存位置恰好有两个属性,位置和内容。
int firstvalue;保留一个内存位置(它的大小在这里无关紧要)。 firstvalue = 5;在那里存储一个值。
firstvalue是与内存地址关联的标签,&amp; firstvalue是该地址。 指针是一个包含地址的变量,用&#39; *&#39;解除引用。为您提供该地址的内容。
所以现在
var newfeeds = [{
content: 'first'
}, {
content: 'second'
}, {
content: 'third'
}];
console.log(
0 in newfeeds
);
console.log(
2 in newfeeds
);
console.log(
3 in newfeeds
);
/* So what you can use is */
var index_key = 1;
if(index_key in newfeeds){
console.log(newfeeds[index_key].content);
}else{
console.log(index_key + ' no such index');
}
var index_key = 3;
if(index_key in newfeeds){
console.log(newfeeds[index_key].content);
}else{
console.log(index_key + ' no such index');
}
好吗?
答案 3 :(得分:0)
让我们理解什么是指针 - 指针是存储的地址,它根据它不存储值本身让我们逐行分析代码
1)第1行 - 定义了两个变量(保持值的空间)
2)第2行 - 定义了两个指针(保持地址的空间)
3)第4行&amp; 5 - 为指针p1和amp指定变量的变量地址。 p2现在p1指向存储值5的位置,p2指向存储15的位置
4)第6行 - 值10存储在p1指向的位置这意味着变量firstvalue的值从5变为10
5)第7行 - p1指向的位置值被复制到p2指向的位置。现在,firstvalue和secondvalue都是相同的,即10
6)第8行 - p2指针的值(它是第二值变量的地址)被分配给p1。现在p1和p2都指向第二值变量
7)第9行 - 将指定值20赋值给指针p1指向的位置,该指针现在是第二个值变量
结果 - 两个输出都显示值20,因为两个指针现在指向第二个值变量,并且在第9行更新为20
答案 4 :(得分:0)
你去......
#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;
}
输出:
第一个值地址:0115FA74,p1地址:0115FA74,p1值5
p1值10,p2值10
p1地址:0115FA68,p2地址:0115FA68
p1值:20
答案 5 :(得分:0)
很抱歉,但您的分析不正确。
从代码的第一部分开始
int firstvalue = 5, secondvalue = 15; int * p1, * p2; p1 = &firstvalue; p2 = &secondvalue;
和你的分析
p1指向第一个值,p2指向第二个值。
您的分析大致正确。我将给出更完整的描述。
p1
是int *
类型的变量(i.r.指向int
的指针)。作业p1 = &firstvalue
将p1
的值指定为变量firstvalue
的地址。这有时被认为意味着指针p1
被指定为指向firstvalue
。
相同的说明适用于p2
和secondvalue
。
现在,为下一个声明
*p1 = 10; //line 1
和你的分析
现在,p1指向值10。
这是不正确的。 p1
未指向值10
。
声明*p1 = 10
将值10
分配给*p1
的结果。 *p1
是对p1
点的引用,其中(如上所述)为firstvalue
。因此,作业*p1 = 10
具有将firstvalue
分配给值10
的效果。
这给我们带来了你的第一个问题(尽管你没有问号就写了一个问题)。
这是否意味着第一个值现在存储10.(第1行)
如果通过&#34;第一个值&#34;你的意思是&#34;名为firstvalue
&#34;的变量,这里的答案是&#34;是&#34;。
现在,我们来看下一个代码声明
*p2 = *p1; //line 2
和你的分析
据我所知,第2行意味着p2和p1指向存储在第二个值的地址处的值。我是对还是错?
你完全错了。
为了更好地理解,让我们将声明分成几部分。 *p1
获取对p1
指向的变量的引用 - firstvalue
(其值为10
)。 *p2
获取p2
指向的变量的引用 - 即secondvalue
。因此,作业*p2 = *p1
与secondvalue = firstvalue
具有相同的效果。
p1
仍指向(包含地址)firstvalue
。同样,p2
仍指向secondvalue
。变量firstvalue
和secondvalue
都具有值10
。
现在我们来到第3行
p1 = p2; //line 3
你对它的观察
你好。最后,我对第3行没有任何线索。所以,也需要一些帮助。
p2
是一个指针,其值为&secondvalue
- secondvalue
的地址。作业p1 = p2
将p1
的值指定为等于p2
的值。这意味着p1
和p2
都包含值&secondvalue
。 (或者指针p1
和p2
都指向secondvalue
)。
结果是
*p1 = 20;
具有将secondvalue
指定为值20
的效果。 firstvalue
未受影响,仍然包含值10
。