int *和int[]共同點和區別

int *aint b[]

  • 相同點

    • a和b的值都表示一片內存區域的地址,都是使用int型進行管理
    • 作爲函數的形式參數沒有任何區別
  • 區別

    • a是一個變量,需要分配內存空間進行存儲,而b是程序中的一個標號,給編譯器提供地址信息,不需要進行保存。因此可以在程序中改變a,但是無法在程序中改變b。
    • 可以使用int b[]定義數組,如 int b[] = {1, 2, 3, 4}, 但是無法使用int *a定義數組 int *a = {1, 2, 3, 4} //語法錯誤
      至於爲什麼編譯器禁止這樣的使用: {1, 2, 3, 4} 定義的數組存放在棧中(函數內定義),如果使用int b[] 接受這個定義的話,編譯器可以根據b[n]直接計算出相應的存儲位置,不需要將b作爲基地址進行尋址。而如果使用int *a = {1, 2, 3, 4}的話,最終會使用a的值作爲基地址再加上偏移量進行尋址。但是a的值在編譯時無法獲取到,因此還是需要一條賦值語句int *a = b。這樣做的話,不僅賦值耗時,而且尋址比b[n]慢(需要多次訪問內存)。得不償失,因此編譯器禁止int *a = {1, 2, 3, 4} 這樣的定義方式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章