你好 Stacked Overflow 的人們!最近我在大學計算機科學課上學習了指標和陣列。為了嘗試測驗我對兩者的理解深度,我嘗試想出一些令人困惑的實體,以查看我是否能夠正確預測結果的結果,以及為什么結果是什么的原因它是......好吧,我似乎把自己搞糊涂了,因為我不明白我想出的這幾個例子。
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;實際運行之類的行,我只是對它為什么起作用感到困惑。為什么它只有在我有 & 時才有效?
uj5u.com熱心網友回復:
我很困惑,因為在那個短代碼中我沒有進一步分配任何東西。
不完全是,您確實是在“進一步”分配一個新值。你在這里做:
cout<<*( valptr)<<endl;
在 C 中, 運算子遞增其運算元。表達方式
valptr
本身在邏輯上等價于valptr=valptr 1,但它作為運算式的一部分出現。valptr作為它出現的運算式的一部分,將增量增加到一個新值。就是 這樣。你也可以很好地猜測--操作員做了什么。并且當它出現在其運算元之前或之后時 ,--其作業方式會有所不同,但這有點偏離主題,您可以在 C 教科書的幫助下自行研究。
這正是您“進一步分配任何東西”的地方。所以,*valptr在這條線之前和之后,會產生不同的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430726.html
下一篇:C 指標的作用域是什么?
