C++ C++;为什么?
我在这个问题上有点困惑,我需要澄清到底发生了什么。如果有人能帮我,我将不胜感激C++ C++;为什么?,c++,pointers,C++,Pointers,我在这个问题上有点困惑,我需要澄清到底发生了什么。如果有人能帮我,我将不胜感激 int i[][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; int* pointy = &i[1][1]; int* copyPointy = pointy; *pointy = 100; pointy = &i[0][2]; cout << *pointy << endl; cout << *copyPointy <<
int i[][3] = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int* pointy = &i[1][1];
int* copyPointy = pointy;
*pointy = 100;
pointy = &i[0][2];
cout << *pointy << endl;
cout << *copyPointy << endl;
我试图弄明白为什么
*copypoint
返回100
而不是3
?如果pointy
指向copyPointy
,并且当语句pointy=&i[0][2]时pointy
的地址发生变化如果执行了code>,那么copyPointy
的地址是否也应该更改,从而更改该地址的内容?请记住,指针的值是一个地址—它指向的对象的地址。指针的值是什么和它指向什么是两个不同的东西
让我们为您的线路贴上标签:
int i[][3] = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int* pointy = &i[1][1];
int* copyPointy = pointy; // (1)
*pointy = 100; // (2)
pointy = &i[0][2]; // (3)
cout << *pointy << endl;
cout << *copyPointy << endl;
inti[][3]={
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int*pointy=&i[1][1];
int*copyPointy=pointy;//(1)
*pointy=100;//(2)
pointy=&i[0][2];//(3)
cout重要的是要记住,指针的值是一个地址——它指向的对象的地址。指针的值是什么和它指向什么是两个不同的东西
让我们为您的线路贴上标签:
int i[][3] = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int* pointy = &i[1][1];
int* copyPointy = pointy; // (1)
*pointy = 100; // (2)
pointy = &i[0][2]; // (3)
cout << *pointy << endl;
cout << *copyPointy << endl;
inti[][3]={
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int*pointy=&i[1][1];
int*copyPointy=pointy;//(1)
*pointy=100;//(2)
pointy=&i[0][2];//(3)
指针是一个值为地址的变量
记住这一点,让我们来看看你的案例:
int* pointy = &i[1][1];
pointy
现在拥有i[1][1]
的地址,即pointy
->地址A
int* copyPointy = pointy;
现在,您分配copyPointy
的pointy
值,它是i[1][1]
的地址,例如,现在copyPointy
->地址A和pointy
->地址A
*pointy = 100;
pointy = &i[0][2];
这些语句分配地址A中的内容100,然后将pointy
更改为地址B
它看起来像copyPointy
->地址A,其中包含100,和pointy
->地址B。copyPointy
不会随pointy
而改变,因为赋值时只会复制值
<> p>并且你还可以标记你的问题C++,你可以使用改变<代码> PosiTy<代码> > <代码> >
int * ©Pointy = pointy;
这意味着copyPointy
是pointy
的别名,一旦更改pointy
的值,copyPointy
的值也会更改。指针是一个值为地址的变量
记住这一点,让我们来看看你的案例:
int* pointy = &i[1][1];
pointy
现在拥有i[1][1]
的地址,即pointy
->地址A
int* copyPointy = pointy;
现在,您分配copyPointy
的pointy
值,它是i[1][1]
的地址,例如,现在copyPointy
->地址A和pointy
->地址A
*pointy = 100;
pointy = &i[0][2];
这些语句分配地址A中的内容100,然后将pointy
更改为地址B
它看起来像copyPointy
->地址A,其中包含100,和pointy
->地址B。copyPointy
不会随pointy
而改变,因为赋值时只会复制值
<> p>并且你还可以标记你的问题C++,你可以使用改变<代码> PosiTy<代码> > <代码> >
int * ©Pointy = pointy;
这意味着copyPointy
是pointy
的别名,一旦更改pointy
的值,copyPointy
的值也会更改。此语句与您的第一个问题有关:
int* copyPointy = pointy;
这意味着copyPointy
中的值的副本将存储在copyPointy
中。pointy
中的值是&i[1][1]
(地址是i[1][1]
)。执行此语句后,内部的copypoint
将是&i[1][1]
如果我们现在就做*copyPointy
,我们会有i[1][1]
,也就是5
现在查看代码中的以下语句:
*pointy = 100;
此处*pointy=100
表示整数值100
应替换pointy
内地址处的值。执行此语句后,i[1][1]
将100
copyPointy
中的地址没有更改,它仍然是&i[1][1]
。但是i[1][1]
中的值已从5
更改为100
。因此,当我们做*copypoint
时,我们得到i[1][1]
,现在是100
最后,看看这句话:
pointy = &i[0][2];
当我们执行此语句时,pointy
将在其中包含一个新地址,即i[0][2]
的地址,该地址包含整数3
。但是copyPointy
的地址仍然是&i[1][1]
,因为它只复制了pointy
中以前的地址
因此,当我们在最后执行*pointy
和*copyPointy
时,我们会得到两个不同地址的值。分别是i[0][2]
中的整数和i[1][1]
中的整数这句话与你的第一个问题有关:
int* copyPointy = pointy;
这意味着copyPointy
中的值的副本将存储在copyPointy
中。pointy
中的值是&i[1][1]
(地址是i[1][1]
)。执行此语句后,内部的copypoint
将是&i[1][1]
如果我们现在就做*copyPointy
,我们会有i[1][1]
,也就是5
现在查看代码中的以下语句:
*pointy = 100;
此处*pointy=100
表示整数值100
应替换pointy
内地址处的值。执行此语句后,i[1][1]
将100