Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++;为什么?_C++_Pointers - Fatal编程技术网

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
的地址发生变化,那么
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 * &copyPointy = 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 * &copyPointy = 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