四個Hello world,就能讓你深刻認識數組和指針!實乃管中窺豹

       各位,數組和指針的問題在C中可謂老生常談了,是重點也是難點,今天我們通過一道題目管中窺豹,再次讓大家理解一下它們之間複雜且微妙的關係,話不多說,請看題:

       題目很簡單,就問最後會輸出什麼。下面我們對代碼進行簡單的分析:分別聲明兩個數組和指針,並都初始化爲相同的內容"Hello world",然後分別對數組和指針進行比較,利用printf輸出比較的結果,也就是真假,反映爲%d就是0和1,本質上就是問我們兩數組和兩指針是否相等。

       講到這裏,其實這道題的考察點已經很清晰了。第一就是數組和指針的本質,也就是你對數組和指針的瞭解程度,在這裏你得知道“arr1==arr2和p1==p2”他們比較的究竟是什麼?

       對於數組來說,數組名它可以退化爲一個地址,這個地址是數組首元素的地址,也就是數組的起始地址,這裏要特別強調一點:整個數組的地址和數組首元素的地址二者值一樣,但代表的意義完全不同,對應的表示方法爲&arr1和arr,這一點前面講過幾次,今天不是我們討論的重點,還有一些具體應用的東西我們就不展開了。回到本題,arr1==arr2那就是比較兩個地址是否一樣,說白了就是兩個Hello world是不是放在一個位置。

       對於指針來說,我們講指針有己址、己值、它址、它值等特點,己址就是指針變量本身的地址,己值就是指針變量本身地址所存放的值,也就是我們通常說的指向的地址,這也正是它址,所以己值和它址意義是一樣的,而它值就是指針指向地址位置所存放的值。這些如果你理解了的話,那本題其實就是比較己值(它址)是否一樣,也就是存放Hello world的地址是否一樣。

       到這裏本題就變爲了存放四個Hello world的地址是否一樣。這也正是考察的第二點:C語言的內存佈局。關於這個前面講過好多次了,我們就不細講了,兩個數組聲明並初始化後,分配了不同的內存位置,即使存儲的都是相同的字符串常量。而兩個指針並未分配具體存儲位置,初始化後二者都指向同一字符串常量,說白了就是我們上面講的,兩個指針己址不同,己值相同,它值相同,那比較的結果也就自然相同了。那本題答案很清晰了,arr1不等於arr2,p1等於p2,相應輸出0和1。

       就到這裏吧,應該來講題目都是環環相扣,這道題你得對數組和指針有一定的瞭解才能看出深層次考察的是內存佈局,這裏也希望通過本題讓大家對數組和指針有更深的理解,感謝大家耐心閱讀!

       對於熱愛編程的人來說,有一羣一起學習一起解答的小夥伴很重要,筆者有一個編程零基礎入門學習交流俱樂部還有學習視頻文件!歡迎初學者和正在進階中的小夥伴們!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章