[英]Strange Behavior with pointers with arrays in c++
你好 Stack Overflow 的人們。 最近我在大學計算機科學class學習指針和arrays,為了測試我對兩者的理解深度,我試着想出一些令人困惑的實例,看看我是否可以正確預測結果的結果。 以及為什么結果是這樣的原因..,好吧我似乎把自己搞糊塗了。 因為我不明白我提出的這幾個例子。
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;
這樣的行。 實際上運行,我只是對為什么會這樣感到困惑。 為什么它只有在我有 & 時才有效?
我很困惑,因為在那段短代碼中我沒有進一步分配任何東西。
不完全是,您確實在“進一步”分配一個新值。 你就在這里做:
cout<<*(++valptr)<<endl;
在 C++ 中, ++
運算符遞增其操作數。 表達方式
++valptr
by itself 在邏輯上等同於valptr=valptr+1
,但它作為表達式的一部分出現。 valptr
作為它出現的表達式的一部分而增加到一個新值。這就是++
所做的。 您也可以很好地猜測--
運算符的作用。 而++
和--
在其操作數之前或之后出現時的工作方式不同,但這有點偏離主題,您可以在 C++ 教科書的幫助下自行研究。
而這正是您“進一步分配任何東西”的地方。 因此,此行之前和之后的*valptr
會產生不同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.