Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++ - Fatal编程技术网

C++ 指针算法与解引用

C++ 指针算法与解引用,c++,C++,在下面的代码中,任何人都可以向我解释粗体的那一行在做什么 struct southParkRec { int stan[4]; int *kyle[4]; int **kenny; string cartman; }; int main() { southParkRec cartoon; cartoon.stan[1] = 4; cartoon.kyle[0] = cartoon.stan + 1; cartoon.kenny =

在下面的代码中,任何人都可以向我解释粗体的那一行在做什么

struct southParkRec { int stan[4]; int *kyle[4]; int **kenny; string cartman; }; int main() { southParkRec cartoon; cartoon.stan[1] = 4; cartoon.kyle[0] = cartoon.stan + 1; cartoon.kenny = &cartoon.kyle[2]; *(cartoon.kenny + 1) = cartoon.stan; //What does this line do? return 0; } 结构南公园酒店{ 国际标准[4]; int*kyle[4]; 国际**肯尼; 线人; }; int main() { 南方公园卡通; 卡通片.斯坦[1]=4; cartoon.kyle[0]=cartoon.stan+1; cartoon.kenny=&cartoon.kyle[2]; *(cartoon.kenny+1)=cartoon.stan;//这行是做什么的? 返回0; }
它增加了指向*cartoon.kenny'的指针“kenny”是指向指针的指针,因此第一个解引用返回一个指针(递增)和一个赋值。因此,*(kenny+1)现在指向数组“stan”的开头。

将其视为

cartoon.kenny[1] = cartoon.stan;
它们基本上是相同的东西

在你的漫画中:
-斯坦,一个4整数的数组。
-kyle,指向int的4个指针数组。
-kenny,指向int的指针,也就是说,指向“int数组”的指针。

cartoon.stan[1]=4将stan数组的第二个元素(int)设置为1。
cartoon.kyle[0]=cartoon.stan+1设置凯尔数组的第一个元素(指向int的指针)指向斯坦数组的第二个元素(我们刚刚设置为4)。
cartoon.kenny=&cartoon.kyle[2]将kenny指针设置为指向kyle数组的第三个元素。
*(cartoon.kenny+1)=cartoon.stan将kyle数组的第四个元素(指向int的指针)设置为指向stan数组的第一个元素(尚未初始化)。更多详细信息:

卡通。kenny
获取kenny指针的地址(kyle数组的第三个元素),
cartoon.kenny+1
获取该地址后的下一个int(凯尔数组的第四个元素,恰好是指向int的指针),
*(cartoon.kenny+1)
取消对该指针的引用,以便我们可以设置它,并且

=cartoon.stan
将其设置为指向stan数组的第一个元素。

如果我们使用下标运算符
[]
(可能使用
&
)而不是
*
+
组合,则其外观如下

cartoon.stan[1] = 4;
cartoon.kyle[0] = &cartoon.stan[1];
cartoon.kenny = &cartoon.kyle[2];
cartoon.kenny[1] = &cartoon.stan[0];
之后

cartoon.kenny = &cartoon.kyle[2];
您可以将
kenny
视为嵌入
kyle
数组的
int*
元素的“数组”,具有2个元素偏移量:
kenny[0]
相当于
kyle[2]
kenny[1]
相当于
kyle[3]
kenny[2]
相当于
kyle[4]
等等

所以,当我们这样做的时候

cartoon.kenny[1] = &cartoon.stan[0];
这相当于

cartoon.kyle[3] = &cartoon.stan[0];
这就是最后一行的基本功能

换句话说,如果我们将kenny从考虑因素中剔除(“杀死kenny”),假设代码的其余部分(如果有的话)不依赖于它,那么您的整个代码将等同于

cartoon.stan[1] = 4;
cartoon.kyle[0] = &cartoon.stan[1];
cartoon.kyle[3] = &cartoon.stan[0];

至于这一切的意义是什么。。。我不知道。

它将凯尔的最后一个元素设置为指向斯坦的第一个元素。

伙计,你从哪里得到这个代码的?卡特曼得到“臃肿”物体的原因是什么?我猜他在这里得到了:我喜欢白痴投票让人们倒下,让他们的答案排在最上面。这里到底出了什么问题?