二.指標和陣列的關係
三.指標和函式的關係1
指標變數佔的位元組數
四.多級指標
五.指標和函式的關係2
指標->位址->記憶體單元的編號。指標就是位址,就是乙個記憶體單元的編號。
指標變數是存放位址的變數。
指標和指標變數不同,
指標就是乙個值,但是通常會把指標變數叫做指標。
基本型別指標:int * , float *, double *, char *等;
第乙個**,通過**簡單介紹一下指標。
#include
intmain
(void
)
結果:
i =
3, j =3,
*p =
3, p =
1703720
p的值就是i的位址
#include
intmain
(void
)
結果:
q =
5
#include
void
swap
(int*,
int*);
//宣告。
intmain
(void
)void
swap
(int
*p,int
*q)//a, b 取位址p, q。 *p, *q,就是a, b。*p和*q互換了,那麼a,b 值就互換了。/*
*的含義:
含義1.乘法,2*3
==6含義2.定義指標:int
* p;
如:i =
* p;
間接運算子或指標運算子:
該運算子放在已經定義好的指標變數前面,
*/
結果:
a =
5, b =
3
一維陣列名為陣列的首位址,是乙個指標常量;確定乙個一維陣列需要陣列第乙個元素位址以及陣列長度;指標之間不能加、乘、除,可以減(結果就是它們之間的距離);兩個指標變數指向的是同一塊連續空間中的不同儲存單元才可以相減;在陣列中使用。
#include
void
function
(char
*p,int len)
printf
("\n");
}int
main
(void);
printf
("a = %#x , a = %#x\n"
, a,
&a[0])
;//%x就是以十六進製制輸出,中間加#就是結果前面會加0x。
function
(a,5);
return0;
}
結果:
a =
0x19ff28
, a =
0x19ff28
s q e u h
#include
void
function
(int
*p,int len)
intmain
(void);
printf
("%d\n"
, a[3]
);function
(a,5);
//a是陣列名,就表示陣列的首位址,傳遞首位址和陣列長度就夠了。
printf
("%d\n"
, a[3]
);return0;
}
結果:
4
88
#include
void
function
(int
*p,int len)
intmain()
;function
(a,6);
int*p;
int*q;
p =&a[5];
//取a[5]位址
q =&a[0];
//取a[0]位址, 這裡寫成q = a也行。
printf
("p和q所指向的單元相隔%d個單元\n"
, p - q)
;return0;
}
結果:
num =
14p和q所指向的單元相隔5個單元
陣列長度為長整數且不能是變數。
傳統陣列記憶體程式設計師無法手動釋放,在程式結束時由系統釋放。
它只能在它所在函式執行結束時由系統釋放。
陣列的長度不能在函式執行過程中動態增縮。
a函式定義的陣列在a函式執行期間可以被其他函式使用,
但a函式執行結束後其他函式將不能使用那個陣列。
#include
voidf2(
int* p,
int len)
voidf1(
void);
f2(a,5)
;printf
("a[2] = %d\n"
, a[2]
);}int
main
(void
)
結果:
a[2]
=10
乙個指標變數佔4個位元組,和電腦位數有關。
預備知識:
sizeof(資料型別)
功能:返回值就是該資料型別所佔的位元組數。
例子:sizeof(char) = 1, sizeof(int) = 4, sizeof(double) = 8
sizeof(變數名)
功能:返回值就是該變數所佔的位元組數。
·假設p指向char型別變數(char本身佔1)
·假設q指向int型別變數(int本身佔4)
·假設r指向double型別變數(double本身佔8)
以位元組為單元編號。
乙個變數的位址用這個變數第乙個編號位址表示,
這個變數本身型別就可以指出這個變數佔幾個位元組。
#include
intmain
(void
)
結果:
444
148
#include
intmain
(void
)
結果:
i =
10
#include
voidf(
int*
* q)
//就是q是int ** 型別,它存放int * 型,就是p
voidg(
)int
main
(void
)
結果:
i =
8
靜態指標不能跨函式使用,動態指標可以跨函式使用,跨函式使用記憶體, 得使用多級指標。
#include
voidf(
int*
*q)//q存放指標型變數p的位址
intmain
(void
)
結果:
5
為什麼有這個結果,不知道,學習中。
#include
#include
voidf(
int*
*q)int
main
(void
)
結果:
5
malloc的使用:
後記:正在學習中,如有講錯,請諒解。
C語言 關於指標總結筆記
脆弱的人才會四處遊說自己的不幸,堅強的人只會不動聲色地成長。一 指標說明 指標是包含另一變數的位址變數。1 int p p是乙個指標,指向整型數。2 int p p是乙個函式,該函式返回乙個指向整型的指標。3 int p p是乙個指標,該指標指向乙個函式,這個函式返回乙個整數。4 int p p是乙...
C語言 《C和指標》學習筆記1
由於自己c語言基礎不是很紮實,最近在學習 c與指標 所以最近可能會定期記錄一下自己的學習心得和筆記。編譯過程的幾個階段 1 預處理器階段 2 編譯階段 3 彙編階段 4 鏈結階段 詞法規則 三字母詞 指的是幾個字元的序列,合起來表示另乙個字元 三字母詞 含義?i?轉義序列,字元轉義 識別符號 資料 ...
C語言的指標學習筆記 1
1.指標是什麼?指標就是指標變數,指標變數也是變數。2.指標能幹什麼?變數是用來存放資料的,所以說指標變數也是用來存放資料的。只不過指標變數中存放的資料比較特殊,存放的是記憶體位址。3.為什麼需要指標?需要間接訪問。對於某些記憶體空間,需要通過位址來進行訪問,所以需要其他變數存放其記憶體位址。4.指...