0. 數組的兩種表現形式
一種是常見的a[10];
//初學者常用
另一種是用指針表示的數組.
//實際工程使用.常用於參數傳遞
因為數組也是指針啊.
1. 一維數組的定義
數組是一批
相同數據的
集合 .
如果說 int a; 是在內存中開辟了一個int大小的空間,
那么 int a[10] 就是表示在內存中開辟了10個
連續的 int大小的空間,總大小為
10 * sizeof(int).
注意,數組開辟的空間是連續的 .
2. 數組的組成 .地址 大小 和 空間
就如同普通變量 int a = 10; 一樣,數組也有
3要素組成.
auto int a[10];
在內存中開辟了一個超大的空間,這個空間有一個名字叫做 a,a即是名稱,也是這段空間的地址 叫
首地址.
這個超大空間分為10個小空間,每個小空間的大小是 int 大小.
這個也是默認放在棧空間auto.
3. 數組的初始化
數組的初始化有兩種情況:
第一次初始化專用
非第一次初始化
第一次初始化: int a[3] = {2,3,4};
//這種大括號的初始化方式只能用於第一次初始化的情況下,往后賦值或者取值,只能用循環的方式來實現.
非第一次:
int i; for(i= 0; i<3;i++){ a[i] = i; }
注意:數組的下標是從0開始的 .
3. 一維數組和指針.!!!!!
定義一個指針,指向 int a[10] 的首地址
int *p = a;
或者
int *p;
p = a; //注意這里不是&a,因為a作為數組名, 本身就是地址 .
在數組中,
a[0] = 10; //數組版 *p = 10; //指針版 a[2] = 20; //數組
*(p+2) = 20; //指針版
首先,p = a,代表着首地址 ,比如是0xA0
那么 p+1 是什么意義? p+1 表示,在首地址的基礎上,往下偏移1個空間量 那p+1=0XA1嗎?? 不是的,因為這個數組的一個空間量是int大小 ,所以它的地址 應該是 0XA0+(sizeof(int) * 偏移量) //0XA4
然后再進行*運算代表取值.
數組指針操作的基本思想就是,在首地址的基礎上,進行指針偏移,然后進行取值和賦值操作
//
例子,數組指針的實際用途
//
對數組 int a[10]進行排序
//
思路: 寫一個排序函數,然后把數組的指針作為參數傳遞進去
// 2. 首先,我們傳進來的是一個數組指針,那么,數組a的指針怎么寫呢// 數組a[10] 的指針是 int *p = a;
//所以設計函數的時候,形參部分就可以寫,int *p, 即數組的形參. int sort(int *p){ //形參 //...具體功能 } int main(){
int a[10] = {1,3,2,5,6,4,9,7,8,0}; //定義一個數組 // 1. 我們的思想就是把這個數組的地址傳遞過去就可以了,那么實現這個功能,要怎么設計sort函數呢? sort(a); //實參 }
這里先介紹一下4個函數:
strcpy(s1,s2); //將s2復制給s1,一旦在s2中遇到'\0', 就停止函數.
strcat(s1,s2); //將s2接在s1末尾.
strlen(s1); //返回s1的長度
strcmp(s1, s2); //比較兩個字符串,如果s1 == s2 ,則返回0, s1< s2 返回值小於0, s1>s2 返回值>0 .
