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 = &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; }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 =
它增加了指向*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];
至于这一切的意义是什么。。。我不知道。它将凯尔的最后一个元素设置为指向斯坦的第一个元素。伙计,你从哪里得到这个代码的?卡特曼得到“臃肿”物体的原因是什么?我猜他在这里得到了:我喜欢白痴投票让人们倒下,让他们的答案排在最上面。这里到底出了什么问题?