關於記憶體記憶體棧
靜態全域性區
初始化的靜態全域性區
**區文字常量區
記憶體以位元組為單位來儲存資料的。
指標的相關概念
指標的定義方法
關於指標的運算子
列子 int num;p=# num = *p;
擴充套件: 如果在一行中定義多個指標變數,每個指標變數前面都需要加*來修飾
int* p,*q;//定義了兩個整型的指標變數p,q
int * p,q;//定義了乙個整型指標變數p,乙個整型變數q
如果指標沒有賦初值,它的值就是隨機的,也就是個野指標
指標的分類
短整型指標
整型指標
長整型指標
float 型的指標
double型的指標
函式指標
結構體指標
指標的指標
陣列指標
總結: 無論什麼型別的指標變數,在32位系統下,都是4個位元組,只能存放對應型別的資料編號
指標和變數的關係
可以通過指標變數來引用變數
注:指標變數在定義的時候可以初始化
指標就是用來存放變數位址的
*+指標變數就相當於指標指向的變數
擴充套件:
注意:指標和陣列元素之間的關係
陣列元素的引用方法
方法2 指標名加下標
補充:c語言規定:陣列的名字就是陣列的首位址,即第0個元素的位址
注意:p和a的不同,p是指標變數,而a是個常量。所以可以用等號給p賦值,但不能給a賦值
方法3 通過指標運算子加取值的方法來引用陣列的元素
指標的運算
兩個相同型別指標可以比較大小
兩個相同型別的指標可以做減法
兩個相同型別的指標可以相互賦值
指標陣列
指標陣列的概念
指標陣列的定義方法
指標陣列的分類
指標的指標
字串和指標
字串的儲存形式:陣列、字串指標、堆
char *str = 「i love c!」
char *str = (char *)malloc(10 *sizeof(char));//動態申請了10個位元組的儲存空間,首位址給str賦值
字元陣列
字串指標堆注意
文字常量區里的內容是不可修改的
堆區的內容是可以修改的
注意:str指標指向的記憶體能不能被修改,要看str指向**,
str指向文字常量區的時候,記憶體裡的內容不可修改
str指向棧、堆、靜態全域性區的時候,記憶體的內容是可以修改
初始化使用時賦值
指向字串的指標
陣列指標(一般配合多維陣列使用)
回顧陣列指標的概念
陣列指標的定義方法
陣列指標和指標陣列的區別
int *p[5];//指標陣列
陣列指標的用法
各種陣列指標的定義
三維陣列指標 加1後指向下個三維陣列
四維陣列指標 加1後指向下個四維陣列,以此類推。。。
注意:陣列指標:本身是個指標,指向乙個陣列,加1跳乙個陣列
在執行程式時,大家會發現a和&a所代表的位址編號是一樣的,即它們指向同乙個儲存單元,但是a和&a指標型別不同
陣列名字和指標變數的區別:
不同點多維陣列中指標的轉換
指標和函式的關係
函式傳參:
傳位址列如
傳陣列傳二維陣列的位址
傳指標陣列
指標作為函式的返回值
指標儲存函式得位址
呼叫函式的方法
函式指標陣列
函式指標最常用的地方
經常混淆的指標
int (*a)[10]
int **p
常見用法2
分析:q是指標陣列的名字,是指標資料的首位址,是q[0]的位址
q[0]是個int*型別的指標。 所以q[0]指標變數的位址,是int**型別的
p = &q[0] 等價於 p=q
int*f(void)
int(*f)(void)
特殊指標
注意:void*型別的指標變數,也是個指標變數,在32位系統下,佔4個位元組
null
main函式傳參
C語言指標
指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...
C語言指標
1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...
c語言指標
編寫程式,在主函式裡用指標陣列輸入六個字串,再用另乙個函式對這六個字串排序,並在主函式中輸出排好序的字串。include void sort char s,int n char temp for int i 0 ifor int j 0 jif strcmp s j s j 1 0 temp s j...