c++ 中带有数组的指针的奇怪行为

Strange Behavior with pointers with arrays in c++

大家好 Stack Overflow 的朋友们!最近我一直在学习我大学计算机科学中的指针和数组 class。为了尝试测试我对两者的理解深度,我试着想出了一些令人困惑的实例,以查看我是否可以正确预测结果的结果,以及结果是什么的原因是...好吧,我似乎把自己搞糊涂了,因为我不明白我想出的这几个例子。

int vals[] = {1,2,3,4,5,6};
int* valptr = vals;

cout<<*valptr<<endl;
cout<<(**&vals)+1<<endl;
//cout<<*(++valptr)<<endl;
// cout<<*(++vals)<<end1;
cout<<*&valptr[0]<<endl;
cout<<**(&valptr)<<endl;
cout<<valptr[0]<<endl;

解决了我的部分主要困惑,所以我在代码上注释掉了一行,我想知道为什么cout<<**(&valptr)<<endl;这样的行实际上是运行,我只是对为什么有效感到困惑。为什么它只有在我有 & 时才有效?

I'm very confusing seeing as in nowhere in that short code am I assigning anything further.

不完全是,您确实在“进一步”分配一个新值。你正在这里做:

cout<<*(++valptr)<<endl;

在 C++ 中,++ 运算符 递增 其操作数。表达式

++valptr

本身在逻辑上等同于 valptr=valptr+1,但它作为表达式的一部分出现。 valptr 递增到一个新值 作为它出现的表达式的一部分。这就是 ++ 所做的。您也可以很好地猜测 -- 运算符的作用。当 ++-- 出现在其操作数之前或之后时,其工作方式有所不同,但这略微 off-topic 并且您可以在 C++ 教科书的帮助下自行研究。

这正是您要“进一步分配任何内容”的地方。因此,*valptr 在这一行之前和之后,会产生不同的结果。