C語言指標

2022-05-11 01:57:52 字數 2195 閱讀 2479

關於記憶體記憶體棧

靜態全域性區

初始化的靜態全域性區

**區文字常量區

記憶體以位元組為單位來儲存資料的。

指標的相關概念

指標的定義方法

關於指標的運算子

列子 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...