1、數組
數組元素個數必須是一個固定的值,可以是整形常量、符号常量及整形常量表達式
數組下标可以是整形常量、整形變量或者整形表達式
數組可以全部初始化,此時元素個數可以省略;也可部分初始化,元素個數不可省略
數組初始化的指派方式隻能用于數組的定義,定義之後再指派隻能一個一個元素指派
2、記憶體位址
計算機記憶體是以位元組為機關的存儲空間,記憶體的每一個位元組都有一個唯一的編号,這個編号就是位址。當C程式中定義一個變量時,系統就配置設定一個帶有唯一位址的存儲單元來存儲這個變量,程式對變量的讀取操作,實際上是對變量所在位址存儲空間進行讀取或寫入資料。
直接引用:通過變量名引用變量(系統自動将變量名轉換為變量的存儲位址)
間接引用:将變量的位址存放在一個變量中,然後通過存放變量位址的指針變量來引用該變量
3、指針變量
一個變量的位址稱為該變量的指針
用來存放一個變量位址的變量稱為指針變量
指針變量定義的一般形式為:類型名 * 指針變量名
注:變量名前面的 "*"是一個說明符,用來說明該變量是一個指針變量,不能省略,但不是變量名的一部分
類型名表示指針變量所指向的變量類型,而且隻能指向這種類型的變量
指針變量相關運算符:
& 取位址運算符
* 指針運算符,取内容
注:指針變量用來存放位址,故不能給指針變量賦常數值
指針變量沒有指向明确的位址前,不能對它所指向的對象指派
對指針進行加1操作,會使指針指向下一個元素
示例:指向 int 型資料的指針加1,其指向的位址加4
指向 char 型資料的指針加1,其指向的位址加1
了解關鍵:
将指針的類型分為兩個概念,一個是指針自身的類型,一個是指針指向資料的類型
4、單個字元的輸入輸出
getchar( ):從輸入裝置中讀取一個字元
例:
char c = getchar( ); 等價于 scanf_s("%c",&c,1);
注:getchar()可以接收回車字元,而scanf()将回車作為資料的間隔符或結束符,且getchar()接收的字元可以不賦給任何變量
putchar( ):将一個字元輸出到輸出裝置
例:
char c = ‘a’; putchar(c);
putchar()可以輸出字元型變量、整型變量、字元型常量以及控制字元和轉義字元
比較:putchar()一次隻能輸出一個字元,而printf()一次能輸出多個字元
5、字元串
在C語言中,字元序列當作字元串處理,字元串的處理基于字元數組,字元串在存儲時其尾部添加結束标志‘\0’('\0'代表ANSI碼為0的字元,是一個空操作符)
字元串初始化方式:
char c[10] = {"Hello world"};
char c[10] = "Hello world";
char c[ ] = "Hello world";
char c[9]; scanf("%s",&c,sizeof(c));
6、字元串操作函數
puts( ):字元串輸出
gets( ):字元串輸入
strlen( ):計算字元串長度
strcat( ):字元串連接配接
strcmp( ):字元串比較
7、辨析
sizeof( ):計算位元組數,包含 '\0'
strlen( ) :計算字元串實際長度,不包含 '\0'
coutof( ):計算字元數組元素個數,包含 '\0'
三者都将空格計入總數
8、二維字元串數組及多元數組
一維字元數組存放一個字元串
二維字元串數組存放多個字元串
多元數組可看作是比其少一個次元的數組的集合
注:二維及二維以上的多元數組,都是先存放低維資料,以此類推
9、二維數組初始化:
理論依據:數組元素在記憶體中線性存放
全部初始化時,按數組存儲順序賦初值
部分初始化時,高維元素個數可省略,低維元素個數不可省略。但是,要在初始化時展現出高維元素個數,即展現出一維數組個數
10、指針數組
不帶下标的二維數組名表示二維數組的起始位址,進行加法操作時則表示作為其元素的一維數組的起始位址
不帶下标的一維數組名表示一維數組的起始位址,進行加法操作時則表示該一維數組一個元素的起始位址
即,加法操作時數組降維
例:
int a[3][4],*p;
p = a[0];
此處p指向一維數組a[0]的起始位址,對其進行加法操作時 p+1 等同于 a[0]+1 ,此時 a[0] 降維至 a[0][0],故其指向數組元素 a[0][1],
則 *(p+1)等于元素 a[0][1] 的值
int a[3][4],(*p)[4];
p = a;
此處p指向二維數組a的起始位址,對其進行加法操作時 p+1 等同于 a+1,此時 a 降維至 a[0],故其指向數組元素 a[1],
則 (p+1)等于一維數組名(起始位址),(p+1)+1 等同于 a[1]+1,則 ((p+1)+1) 等同于 a[1][1]
11、函數指針
函數在記憶體中占有一片連續的記憶體區域儲存其二進制代碼,而函數名在C語言中代表這片連續的記憶體區域的首位址,故函數名可用指針替換
指向函數的指針變量的一般形式為:
資料類型 (*指針變量名) (形參表列)
例: int (*MyFun) (int,int)
資料類型即函數傳回值類型
形參表列即函數形式參數表列
12、二級指針
指針本身也是變量,是以也有自己的位址。
我們可以将一個指針變量分為兩個部分,一部分存放變量的位址,另一部分是其自身的位址。了解這一點,二級指針的概念就比較容易了解了。
故二級指針就是在一級指針的基礎上再增加一個指針,用來存放一級指針的位址,而其本身也有自己的位址,依此類推