簡體   English   中英

c++ 中 arrays 指針的奇怪行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM