一.定義與初始化
1. 如何理解指標?
1) 指標是變數。
2) 指標是乙個位址,指向的是個型別。
3) 指標指向的是位址,位址指向的是內容。
4) 指標的指標,是面對於指標的變數。
5) 指標型別的位元組長度由作業系統決定(32位作業系統為4位元組,64位作業系統為8位元組)
2.定義指標的幾種規範
int *p; //重在表示 *a 是 int型的。
int* p; //重在表示 int* 是乙個型別(複核型別),它是指向 int 的指標。
二.*與&運算子詳解
*是取指標目標運算子 其後跟隨的必須是指標類變數
&是取位址運算,對任意變數都可以進行取位址操作
1. 指標的型別和指標所指向的型別
指標型別:
1) int *ptr; //指標的型別是int*
2) char *ptr; //指標的型別是char*
3) int **ptr; //指標的型別是int**
4) int (*ptr)[3]; //指標的型別是int(*)[3]
5) int *(*ptr)[4]; //指標的型別是int*(*)[4]
指標所指向的型別:
1) int *ptr; //指標所指向的型別是int
2) char *ptr; //指標所指向的型別是char
3) int **ptr; //指標所指向的型別是int*
4) int (*ptr)[3]; //指標所指向的型別是int()[3]
5) int *(*ptr)[4]; //指標所指向的型別是int*()[4]
2. 指標的值
(*p)++:對p指向的記憶體空間進行操作(加1)à5 + 1 = 6
p++:對p對應的記憶體空間加1(步長)à0x1000 + 4(步長) = 0x1004
num++:對num對應的記憶體空間加1à5 + 1 = 6
一維指標儲存基本變數的位址
二維指標儲存一維指標的位址
三維指標儲存二維指標的位址
遠指標:超過二維的指標。
三.指標的運算
1. 指標的賦值運算
空指標:不允許操作,不允許訪問。null為(void *)0的巨集定義
野指標:(詳情見野指標及野指標的避免)
指標的算術運算:
à警告:從不相容的指標型別賦值(檢查步長)
長步長賦值給短步長:資料不完整
短步長賦值給長步長:資料可能越界
void *——萬能指標:可指向任意型別的指標,但不能取值。
2. 指標的算術運算
指標+整數:加步長
指標-指標:兩指標相隔的資料個數。
char *ptr = 「hello world」;
char *str = ptr + sizeof(ptr);àstr – ptr = 11
int a[10] = ;à&a[9]- &a[0] = 9
c語言指標初探 一 指標與陣列
一 陣列名指標 c 編譯器將陣列名解釋為指標 include using namespace std int main cout sz 編譯器將陣列名解釋為陣列記憶體區域的首位址,對一維陣列來說要實現對某個元素的訪問,既可以用陣列名 下標的形式,也可以用間接引用 陣列名 偏移 陣列元素的指標形式 指...
指標(一) 指標與二級指標
一 指標理解 二 二級指標 三 指標表示式 在指標表示式中,變數做左值與右值含義不同,通常變數做左值,變數名對應儲存空間 而變數做右值,代表資料內容。那麼,若有 char ch a char cp ch 則,下列 能做左值或右值嗎?ch 可以做右值 cp 可以做右值,也可以做左值 cp 可以做右值 ...
c語言與指標 (一)指標與變數
寫在前面 指標是學習c語言時,最讓人頭痛的乙個難題。但是指標不僅是c語言的精髓,它還貫穿整個計算機底層儲存與訪問方式。指標實際上就是位址,指標變數用來存放指標 位址 指標變數也是一種變數,它和不同的變數同樣要佔一定的儲存空間。但指標變數與不同的變數不同之處在於,指標的儲存空間存放的不是不同的資料,而...