陣列和指標並不相同,只是有類似的地方。
int a=10;
// 定義變數
int b;
b=10
;//宣告變數
宣告是指普通的宣告,宣告的不是本身,而是在其他地方建立的物件;宣告時不會開闢空間,故宣告陣列時不需要提供關於陣列的長度,對於多維陣列,需提供除最左邊一維之外其他維的長度。
定義是指特殊的宣告,會直接開闢空間。
變數由空間、內容、型別組成。
int a=10;
int b=a;
其中,a=10,a代表變數空間,稱為左值。(左值一般位於表示式左邊,但不絕對,必須是變數,即可修改其內容才能位於表示式的左邊)
b=a,a代表變數內容,稱為右值。(右值一般位於表示式右邊,但也不絕對)
定義:相似元素的集合。(元素:c語言中所有型別)
1.陣列傳參時會發生降維現象,即不管幾維陣列傳參時均會降維為指標。
2.傳參時均會形成臨時變數。
void
fun(
int arr,
int sz)
intmain()
;int sz=
sizeof
(arr)
/sizeof
(arr[0]
);fun(arr,sz)
;return0;
}
3.傳參時形引數組 void fun(int arr),為下標操作符,裡面的數字可省略(可不寫可為任何數字),因為沒有實際意義。
4.規定中,左值必須為可修改的值,雖陣列名也可確定物件在記憶體中的資料,也是左值,但不可作為賦值的物件,因陣列名是不可修改的值。
5.陣列型別是由陣列型別和元素個數共同決定。
6.陣列可直接訪問資料,例如a[1],相當於獲得a+1這個位址訪問其資料。
7.陣列名只能表示整個陣列的兩種特殊情況
int
main()
;printf
("%d\n"
,sizeof
(arr));
printf
("%d\n"
,sizeof
(arr+1)
);printf
("%p\n"
,&arr)
;}
(1)sizeof(arr),只有陣列名時代表整個陣列,若增添任何運算,陣列名就變為首元素的位址;
(2)&arr,取位址陣列名時,代表整個陣列。
其他情況陣列名均代表首元素的位址。
int
main()
1.間接訪問資料;指標訪問時先定義乙個指標p,這個指標指向某個空間,對其解引用訪問資料。
2.定義指標時,系統並不為指標所指向的物件分配空間,只分配指標本身的空間。
int
main()
除非在定義指標時用字串初始化,此時系統會為其開闢空間。但此時字串被定義為唯讀,不可通過指標修改,有些編譯器中,字串常量被放置於只允許讀取的文字段中,故指標釋放後,字串內容還存在;陣列如果用字串常量初始化,後面可進行修改,陣列釋放時字串內容同時也釋放。
int
main()
//結果為blackfght
3.下標總是與指標的偏移量相同int
main()
用指標訪問a[i],以上三種方式均可。
指標陣列
指標陣列著重點在陣列,即為存放指標的陣列。
陣列指標
陣列指標是指標,是能指向陣列的指標,所以陣列指標中存放的應該是陣列的位址。
int
main()
那麼這兩個哪個是指標陣列,哪個是陣列指標呢?
在c語言中,基本操作符的運算級下表操作符()在解引用操作符(*)之上,故第乙個p1先與結合,p1是陣列,int *p1[10]表示整形指標的陣列;第二個()的優先順序最高,故p2先解引用操作符結合,p2為指標,表示指向字元型陣列的指標。
注意:對指標+1等於加所指向型別的大小。在32位平台下,二級指標以上+1均是+4個位元組。
二維陣列會降維為陣列指標。
void
fun(
int(
*p)[5]
,int sz)
intmain()
因為在認知上其實所有陣列都是一維陣列。這怎麼理解呢?
一維陣列編譯器在開闢空間時為連續的線性空間。二維陣列書本上常見的幾行幾列只是為了方便我們理解,實際上在記憶體中儲存時二維陣列也是線性儲存,可以將其理解為一行為陣列的乙個數值,一行又有5個陣列,故傳參時降維為陣列指標。
注意:在32位平台下,所有指標型別傳參時均消耗4個位元組,形成指標臨時變數。
指標破解 上)指標和陣列
初期接觸指標時,我們大都是對指標進行簡單的解引用賦值等操作,指標的操作物件大都是int或者char等基本型別,所以簡單理解後便可以輕鬆應對。但是,就如同剛學會騎自行車後就要飛向賽博坦星球 汽車人老家 基本的int char 還沒有掌握完全,取而代之的是各種形態各種變化的 機械 怪物 指標等複雜的宣告...
陣列指標和指標陣列
陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...
陣列指標和指標陣列
一 定義 陣列指標 陣列指標 是指向陣列 首元素的位址的 指標,其本質為指標 這個指標存放的是陣列首位址的位址,相當於2級指標,這個指標不可移動 指標陣列 陣列元素為指標的陣列,其本質為陣列。二 舉例 int a 3 4 這個無需多說,就是乙個 二維陣列 int p 4 就相當於int p 4 它就...