指標與陣列之間的恩恩怨怨很多初學者弄不清指標和陣列到底有什麼樣的關係。我現在就告訴你:他們之間沒有任何關係!只是他們經常穿著相似的衣服來逗你玩罷了。指標就是指標,指標變數在32 位系統下,永遠佔4 個byte,其值為某一個記憶體的地址。指標可以指向任何地方,但是不是任何地方你都能透過這個指標變數訪問到。陣列就是陣列,其大小與元素的型別和個數有關。定義陣列時必須指定其元素的型別和個數。陣列可以存任何型別的資料,但不能存函式。既然它們之間沒有任何關係,那為何很多人把陣列和指標混淆呢?甚至很多人認為指標和陣列是一樣的。這就與市面上的C 語言的書有關,幾乎沒有一本書把這個問題講透徹,講明白了。指標和陣列的對比指標儲存資料的地址,任何存入指標變數p 的資料都會被當作地址來處理。p 本身的地址由編譯器另外儲存,儲存在哪裡,我們並不知間接訪問資料,首先取得指標變數p 的內容,把它作為地址,然後從這個地址提取資料或向這個地址寫入資料。指標可以以指標的形式訪問*(p+i);也可以以下標的形式訪問p[i]。但其本質都是先取p 的內容然後加上i*sizeof(型別)個byte 作為資料的真正地址。通常用於動態資料結構通相關的函式為malloc 和free。通常指向匿名資料(當然也可指向具名資料)陣列儲存資料,陣列名a 代表的是陣列首元素的首地址而不是陣列的首地址。&a 才是整個陣列的首地址。a 本身的地址由編譯器另外儲存,儲存在哪裡,我們並不知道。直接訪問資料,陣列名a 是整個陣列的名字,陣列內每個元素並沒有名字。只能透過“具名+匿名”的方式來訪問其某個元素,不能把陣列當一個整體來進行讀寫操作。陣列可以以指標的形式訪問*(a+i);也可以以下標的形式訪問a[i]。但其本質都是a 所代表的陣列首元素的首地址加上i*sizeof(型別)個byte 作為資料的真正地址。通常用於儲存固定數目且資料型別相同的元素。隱式分配和刪除自身即為陣列名
指標與陣列之間的恩恩怨怨很多初學者弄不清指標和陣列到底有什麼樣的關係。我現在就告訴你:他們之間沒有任何關係!只是他們經常穿著相似的衣服來逗你玩罷了。指標就是指標,指標變數在32 位系統下,永遠佔4 個byte,其值為某一個記憶體的地址。指標可以指向任何地方,但是不是任何地方你都能透過這個指標變數訪問到。陣列就是陣列,其大小與元素的型別和個數有關。定義陣列時必須指定其元素的型別和個數。陣列可以存任何型別的資料,但不能存函式。既然它們之間沒有任何關係,那為何很多人把陣列和指標混淆呢?甚至很多人認為指標和陣列是一樣的。這就與市面上的C 語言的書有關,幾乎沒有一本書把這個問題講透徹,講明白了。指標和陣列的對比指標儲存資料的地址,任何存入指標變數p 的資料都會被當作地址來處理。p 本身的地址由編譯器另外儲存,儲存在哪裡,我們並不知間接訪問資料,首先取得指標變數p 的內容,把它作為地址,然後從這個地址提取資料或向這個地址寫入資料。指標可以以指標的形式訪問*(p+i);也可以以下標的形式訪問p[i]。但其本質都是先取p 的內容然後加上i*sizeof(型別)個byte 作為資料的真正地址。通常用於動態資料結構通相關的函式為malloc 和free。通常指向匿名資料(當然也可指向具名資料)陣列儲存資料,陣列名a 代表的是陣列首元素的首地址而不是陣列的首地址。&a 才是整個陣列的首地址。a 本身的地址由編譯器另外儲存,儲存在哪裡,我們並不知道。直接訪問資料,陣列名a 是整個陣列的名字,陣列內每個元素並沒有名字。只能透過“具名+匿名”的方式來訪問其某個元素,不能把陣列當一個整體來進行讀寫操作。陣列可以以指標的形式訪問*(a+i);也可以以下標的形式訪問a[i]。但其本質都是a 所代表的陣列首元素的首地址加上i*sizeof(型別)個byte 作為資料的真正地址。通常用於儲存固定數目且資料型別相同的元素。隱式分配和刪除自身即為陣列名