#指標的型別、指標所指向的型別
a. 指標儲存的數值是記憶體的乙個位址
b. 只要把指標宣告語句中的指標名去掉,剩下的部分就是指標的型別
c. 只要把指標宣告語句中的指標名和名字左邊的指標宣告符*去掉,剩下的就是指標所指向的型別 例子
**部分
int *ptr;
char *ptr;
int **ptr;
int (*ptr)[3];
int *(*ptr)[4];
#指標的值
a. 指標的值是指指標本身儲存的數值,這個值會被編譯器當做乙個位址進行編譯
b. 指標本身的大小是乙個字長(32位機是4位元組,64位機是8位元組)
c. 指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始,長度是sizeof(指標所指向的型別)的一片連續記憶體區域
注1. 說乙個指標的值是x,就是說該指標指向了以x為首位址的一片記憶體區域
注2. 說乙個指標指向了某塊記憶體區域,相當於說該指標的值是這塊記憶體區域的首位址
d. 指標所指向的記憶體區和指標所指向的型別是兩個完全不同的概念
注1. 指標光宣告但不初始化時,它所指向的記憶體區域是不存在的
#指標運算
a. 指標可以加減乙個整數,注意這種運算的意義和通常的數值加減運算的意義是完全不一樣的 例子
**部分
int a[20];
int *ptr = a;
ptr++; 例子
**部分
char a[20];
int *ptr = a;
ptr += 4;
#運算子&和*
a. & 取址符
b. * 取值符 例子
**部分
int a, b;
int *p, **ptr;
p = &a;
*p = 24;
ptr = &p;
*ptr = &b;
**ptr = 24;
#指標表示式
a. 如果乙個表示式的最後結果是乙個指標,那麼這個表示式就叫做指標表示式 例子
**部分
int a, b;
int array[10];
int *pa;
pa = &a
int **ptr = &pa;
*ptr = &b;
pa = array;
pa++;
#指標和陣列的關係
a. 陣列的陣列名可以看做是個指標(注意用詞,「可以看做是」,只是作為右值自動轉化為指標) 例子
**部分
int array[10] = , value;
value = array[0];
value = array[3];
value = array[4];
如該例,定義乙個陣列 type array[n],則陣列名array有如下幾層含義
1). 它代表整個陣列,型別是type[n]
2). 它是乙個指標,型別是type *,指向的型別是type
3). 有單獨的記憶體區,和陣列第0號單元佔據的記憶體區不同
4). 該指標相當於乙個指標常量,不可以修改
#指標和結構體
a. 可以自定義乙個指向結構體型別物件的指標 例子
**部分
struct mystruct ;
struct mystruct s = ;
struct mystruct *p = &s;
int *ptr = (int *)&s;
#指標和函式
a. 可以把乙個指標宣告為乙個指向函式的指標 例子
#include
void fun(char *s)
int main (int argc, const char * argv)
#一些複雜宣告的解釋
int (* func)(int *p)
1. 先找到未定義的識別符號,這裡是func,func被一對括號所包圍,且前面有個*號,說明func是乙個指標
2. 後面有括號,說明(* func)是乙個函式,而func是乙個指向函式的指標
3. 這個函式的形參是int *
4. 整個函式的返回值是個int
5. 結論,這是乙個返回值是int、形參為int *型別的乙個指標函式
int (* func)(int *p, int(*f)(int *))
1. (* func)是乙個函式
2. 這個函式有兩個形參,型別分別是int *和int (*)(int *),也就是乙個返回值為int的指標函式
3. 整個函式的返回值是int
4. 結論,這是乙個返回值是int、形參分別為int *和乙個返回值為int的指標函式的乙個指標函式
int (* func[5])(int *p)
1. (* func[5])是乙個函式
2. func是乙個有5個元素,每個元素都是乙個函式指標
3. 這個函式有乙個型別為int *的形參
4. 這是返回值是int、形參是int *型別的函式指標陣列
int (* (* func)[5])(int *p)
1. func是乙個指標陣列
2. 這個指標陣列的元素是指標
3. 總結,func是乙個指向陣列的指標,陣列的元素是函式指標,這些指標指向具有int *形參,整個函式返回值為int
C語言 資料結構 結構體
一 結構體的定義 陣列 array 是一組具有相同型別的資料的集合。但在實際的程式設計過程中,我們往往還需要一組型別不同的資料,例如對於學生資訊登記表,姓名為字串,學號為整數,年齡為整數,所在的學習小組為字元,成績為小數,因為資料型別不同,顯然不能用乙個陣列來存放。結構體 struct 可以來存放一...
結構體指標,C語言結構體指標詳解
結構體指標,可細分為指向結構體變數的指標和指向結構體陣列的指標。前面我們通過 結構體變數名.成員名 的方式引用結構體變數中的成員,除了這種方法之外還可以使用指標。前面講過,student1 表示結構體變數 student1 的首位址,即 student1 第乙個項的位址。如果定義乙個指標變數 p 指...
資料結構 結構體和結構體指標
結構體 struct node s1,s2 變數s1,s2 typedef struct node ss 型別名ss結構體指標 typedef struct node pointer 等價於typedef struct node pointer 等價於 struc t node typedef st...