陣列的粒度問題

2021-08-04 09:33:41 字數 860 閱讀 1640

在c中,在幾乎所有使用陣列的表示式中,陣列名的值是個指標常量,也就是陣列第乙個元素的位址。 它的型別取決於陣列元素的型別: 如果它們是int型別,那麼陣列名的型別就是「指向int的常量指標「。

在以下兩種場合下,陣列名並不是用指標常量來表示,就是當陣列名作為sizeof操作符和單目操作符&的運算元時。 sizeof返回整個陣列的長度,而不是指向陣列的指標的長度。 取乙個陣列名的位址所產生的是乙個指向陣列的指標,而不是乙個指向某個指標常量的指標。

所以&a後返回的指標便是指向陣列的指標,跟a在指標的型別上是有區別的。

請看下面的例子:

從以上輸出我們可以看出:陣列名和陣列名取位址在數值上是相同的,均表示陣列第乙個元素的位址。但是二者的顆粒度不同。

當陣列是一維陣列時,

陣列名是以乙個陣列元素為顆粒度,表現為「當陣列名加1時,這裡的1表示乙個陣列元素單元」,例子中的陣列元素為整數,所以陣列名加1時位址加4;而

陣列名取位址&以整個陣列為顆粒度,表現為「當陣列名取位址&加1時,這裡的1是表示整個陣列單元」,例子中的陣列為有5個元素的整型陣列,所以陣列名取位址&加1時,位址加20.

當陣列是二維陣列時,陣列名array、array[0]、&array[0][0]以及陣列名取位址&在數值上是相同的,同樣各個之間的顆粒度不同。其中

array[0]以及&array[0][0] 的顆粒度相同,均是以乙個陣列元素為顆粒度,所以它們加1後,位址加4;而

陣列名和陣列名取位址&顆粒度不同,前者以一行元素為顆粒度,後者以整個陣列單元為顆粒度,所以前者加1,位址加3*4,後者加1,位址加6*4.

冗餘的粒度問題

以前談過重用的粒度問題 今天也談談冗餘的粒度。1.資料庫欄位的冗餘 好處1 合適欄位的冗餘,對於提供資料庫的查詢速度會有很大提公升,因為可以不用於其他表join去獲取資料 壞處 需要在多個表中維護資料的一致性 2.業務中多個表的冗餘 乙個最簡單的道理,對於大型網際網路,比如一次交易,資料會放入不同的...

JUnit測試的粒度問題

對於junit測試和tdd實踐中有如下的疑問,請各位解惑 junit測試的粒度如何把握?簡單的說是針對public的方法寫測試就ok了呢?還是說要具體針對public方法中執行邏輯的每個步驟來寫測試方法?先說一下為什麼會有這種困惑 業務邏輯比較簡單時,當然只針對public方法的業務流程來設計案例,...

關於粒度的認識

構建資料倉儲時,如何描述事實表的單個行?答案就是粒度。粒度定義意味著對各事實錶行實際代表的內容給出明確的說明,傳遞了同事實表度量值相聯絡的細節所達到的程度方面的資訊。實際應用中我們一般會這樣定義粒度,比如 顧客購物券上掃瞄裝置一次拾取的分列項內容 醫生開出的單據專案內容 銀行帳號的月快照 手機使用者...