一、陣列名代表什么
二、陣列名同指標區別
三、使用陣列名的其它含義
一、陣列名代表什么
考慮如下宣告:
int a;
int b[10];
我們將變數a成為標量,因為它是一個單一的值,而這個變數的型別為一個整型(int),
而變數b我們稱為一個陣列,因為它是一些值的集合,下標和陣列名一起使用,可用于標
識該集合中某個特定的值,
如b[0]表示的是陣列b的第一個元素的值,b[4]表示第5個值,每個特定值都是一個量,
b[4]的型別是整型,那b的型別是什么?以及b 表示的又是什么?
既然b[0],b[1],b[2],b[3],b[4]代表的是單個的元素,那么b代表的不就整個陣列嗎?
但事實并非如此,在C中,幾乎所有使用陣列名的運算式中,陣列名的值是一個指
針常量,也就是陣列名是一個指向陣列第一個元素的地址的指標常量,
并取決于陣列元素的型別:如果為int型別,那么陣列名的型別就是“指向int的常量 指標”;
如果陣列名的型別是其他型別,那么陣列名的型別就是“指向其他型別的常量指標”
那么陣列名的值是一個指標常量,那么陣列和指標豈不是相同的?
很顯然,并不是,因為陣列具有一些和指標完全不同的特征,例如:陣列具有確定數量
的元素,而指標只是一個標量值,編譯器用陣列名來記住這些屬性,只有當陣列名在表達
式中使用時,編譯器才會為其產生一個指標常量,
二、陣列名同指標區別
為了說明指標和陣列并不是相等的,考慮如下宣告:
int a[5];
int *b;
a和b能夠互換使用嗎?他們都具有指標價值,而且都可以進行間接訪問和下標參考訪問操
作,但是,他們還是存在相當大的區別,
宣告一個陣列時,編譯器將根據宣告所指定的元素保留記憶體空間,然后再創建陣列名,它
的值是一個常量,指向這段空間的起始位置(首元素的地址),
宣告一個指標時,編譯器只為指標本身保留記憶體空間,它并不為任何整型值分配記憶體空間,
此外,指標變數并未被初始化為指向任何現有的記憶體空間,如果它不是一個自動變數,它甚至
根本不會被初始化,把這兩個宣告用圖的方法來表示,可以發現它們之間存在顯著不同,
ps:此時的b為野指標
三、使用陣列名的其它含義
陣列名在一般情況下使用時都是代表首元素地址,但在以下兩種情況是其他含義:
1.&(陣列名),該情況是產生一個指向陣列的指標,
2.sizeof(陣列名),該情況回傳整個陣列的長度,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545299.html
標籤:其他
上一篇:【牛客】5 時序邏輯
下一篇:設計模式

