回覆列表
  • 1 # 北星之光7

    陣列指標顧名思義是一個指向陣列的指標。

    指標陣列同理是由一些指標型別資料組成的陣列。陣列的每個元素都是一個指標。

    你直接理解最後兩個字的字面意思就行。最後兩個字是指標,這就是一個指標。是陣列就是一個數組。當然陣列名本身也是一個指向陣列第一個元素的地址的指標。

  • 2 # IT劉小虎

    很多C語言初學者在學到指標時,都會遇到“陣列指標”和“指標陣列”這兩個名詞,然後就一臉懵逼了,其實在考慮C語言中的陣列指標和指標陣列時,只需多加幾個字,一切就清晰許多了:

    陣列指標 -> 陣列型別的指標,所以陣列指標是一個指標。

    指標陣列 -> 指標型別的陣列,所以指標陣列其實是一個數組。

    C語言中的指標不僅有加法運算,還有減法運算,不過乘除運算就是非法的了。編譯並執行上述C語言程式碼,可以得到如下輸出:

    其實,訪問指標 p 指向的數值,除了“* ”運算子外,也可以以陣列的形式,本例中 p[N] 和 *(p+N) 是等價的:

    相信有讀者已經注意到 p[-1] 了,這似乎與C語言陣列下標不能為負的語法相悖,那為何這裡能夠編譯透過,並正常執行呢?鑑於該問題與主題無關,這裡不再贅述,感興趣的讀者可翻閱我之前的文章。陣列指標

    如果題主覺得上面的C語言程式碼示例沒有難度,其實你已經會用陣列指標了。在上面的例子中,p 就是一個數組指標。p 是一個 char* 型的指標,它指向陣列,所以叫“陣列指標”。

    陣列指標就是指向陣列的指標,就像 int 型指標就是執行 int 型變數的指標一樣。

    陣列指標就這麼簡單。其實,記住陣列指標就是指向陣列的指標這句話後,再複雜點的情況也能輕鬆應對。請看下面的例子,我們先用C語言定義一個二維陣列,用來存三個人名:

    name[3][6] 中的 3 表示 name 陣列一共有 3 行,6 表示每行最多有 6 個 char 型資料。現在,我想用陣列指標指向這三個人名,可以如下定義:

    () 優先順序高,說明 p2 首先是個指標,什麼型別呢?括號裡的內容看過了,現在忽略它,那顯然,p2 是一個指向 char [6] (6元素陣列型別)的指標,name 就是一個 char [6] 型的資料,所以可以直接把 name 賦值給 p2:

    p2 = name;

    如果題主看過我之前的文章,應該知道指標的加法運算結果受指標的型別影響,那如果 p2 指向的地址為 0, p2[1] (即p2+1) 指向的地址為多少呢?

    答案是 6,因為 p2 是一個 char [6] 型別的指標。對於 name 而言,一行為 6 位元組,因此 p2[N] 恰好指向的是 name 的每一行,因此陣列指標又被稱作“行指標”。 如果執行以下C

    語言程式碼:

    實際上就是把 name 記錄的三個人名打印出來。以陣列的形式訪問也是一樣的:

    編譯並執行,得到如下輸出:

    指標陣列

    討論完了陣列指標,再來看看指標陣列。其實,指標陣列就是一個數組,只不過這個數組裡存放的都是指標而已。就跟我們說int陣列是一個存放 int 的陣列一樣。在C語言中指標陣列的定義也很簡單:

    char *p3[3];

    [] 的優先順序高於 * ,說明 p3 首先是個陣列,什麼型別的陣列呢?char* 型的,char* 表示一個指標型別,所以 p3 就是一個指標陣列

    如果使用指標陣列指向 name,就不能直接把 name 賦值給 p3 了,因為型別不同。但是,p3 裡存放的都是 char* 型的指標,即 p3[0],p3[1],p3[2] 是 char* 型的指標,而 name[0], name[1],name[2] 也是 char* 型的指標,所以可以把 name[N] 賦值給 p3[N],請看如下C語言程式碼:

    編譯並執行,可以得到如下輸出:

    與預期一致。這樣,我們就使用了C語言中的指標陣列訪問了 name 陣列。

    小結

    到這裡,C語言中的陣列指標和指標陣列兩者的區別就豁然開朗了,陣列指標是一個指標變數,它佔有記憶體中一個指標的儲存空間。指標陣列是多個指標變數,也即陣列,以陣列形式存在記憶體當中,佔有多個指標的儲存空間。

  • 3 # 福盈之琅

    從名字上就能看出區別,陣列指標是一個指標,是指向這個陣列的指標。指標陣列是一個數組,這個陣列的每個元素都是一個指標。

  • 中秋節和大豐收的關聯?
  • 牆壁開關噴字如何擦掉?