c語言的指標確實比較難搞懂,今天再溫習,學習一遍,加深理解,進一步提高c語言程式設計水平。
一、指標說明
指標是包含另一變數的位址變數。
1、int *p
p是乙個指標,指向整型數。
2、int *p()
p是乙個函式,該函式返回乙個指向整型的指標。
3、int (*p)()
p是乙個指標,該指標指向乙個函式,這個函式返回乙個整數。
4、int *p
p是乙個陣列,該陣列的每乙個元素是指向整數的指標。
5、int (*p)
p是乙個指標,該指標指向乙個陣列,這個陣列的每乙個元素是乙個整數。
6、int *(*p)()
p是乙個指標,該指標指向乙個函式,這個函式返回乙個指向整數的指標。
二、指標的初始化(賦位址)
1、通過符號&取變數(包括結構變數、陣列第乙個元素)的位址賦給指標;
2、把陣列名賦給指標;
3、把函式名賦給指向函式的指標;
4、動態分配記憶體;
示例:struct c ;
struct c *p;
p=(struct c*)malloc(sizeof(struct c));
三、指標與陣列、函式的關係
1、對於一維陣列int a或指標int *a
a+i指向a[i]
2、對於字串char s[i]或指標char *s
s+i指向第i個字元s[i]
3、對於二維陣列int a[i][j]
*a+j指向a[0][j]
*(a+i)指向a[i][0]
*(a+i)+j指向a[i][j]
示例:對於a[2][3]=;
有*(*(a+1)+1)=5;
4、對於字串陣列char p[i][j]或字元型指標陣列char *p[i]
*p+j指向第0個字串的第j個字元
*(p+i)指向第i個字串的第j個字元
示例:對於*p=;有*(*(p+1)+1)="e";
對於char p[3]=;有*(*(p+1)+1)="e";
5、對於指標陣列int *a[i]
a[i]指向變數i,即*a[i]=變數i或a[i]=&變數i
6、對於結構struct xy
*p;p是指向結構xy的指標
(*p).x或p→x是表示x的內容
(*p).y或p→y是表示指標y的值(位址)
*(*p).y或p→y是表示y所指的內容
&(*p).x或&p→x是表示x的位址
四、指標的分類
1、近指標(near)
近指標為16位指標,它只含有位址的偏移量部分,近指標用於不超過64k位元組的單個資料段或**段。在微、小和中編譯模式下產生的資料指標是近指標(預設狀態),在微、小和中編譯模式下產生的碼指標(指向函式的指標)是近指標(預設狀態)。
2、遠指標(far)
遠指標為32位指標,指標的段位址和偏移量都在指標內,可用於任意編譯模式,每次使用遠指標時都要重灌段暫存器,遠指標可定址的目標不能超過64k,因為遠指標增減運算時,段位址不參與運算,在緊湊、大和巨模式下編譯產生的資料指標是遠指標(預設狀態)。
3、巨指標(huge)
巨指標為32位指標,指標的段位址和偏移量都在指標內,可用於任意編譯模式,遠指標可定址的目標可以超過64k,巨指標是規則化的指標。
五、指標的轉換
1、遠指標轉換成巨指標
使用以下函式
void normalize(void far **p)
*p=(void far *)(((long)*p&0xffff000f)+(((long)*p&0x0000fff00<<12));
六、指標的使用
1、將浮點數轉換為二進位制數
float ff = 16.5;
unsigned char *cc;
(float*)cc=&ff;
此時cc的內容為「00008441」,即cc第乙個位元組=0,第二個位元組=0,第三個位元組=0x84,第四個位元組=0x41。
2、將二進位制數轉換成浮點數
float ff;
unsigned char *cc;
cc=(unsigned char *)malloc(4);
cc=(unsigned char *)&ff;
*(cc+0)=0;
*(cc+1)=0;
*(cc+2)=0x84;
*(cc+3)=0x41;
C語言指標學習筆記一
一 指標陣列和陣列指標的區別 指標陣列 是乙個陣列,但是陣列裡儲存的資料型別是指標 陣列指標 是乙個指標,但是指標的型別是指向乙個陣列 int array 4 定義了乙個有4個int 資料型別的陣列 int p 4 定義了乙個具有4個int資料型別的陣列的指標 初始化 int array 4 int...
學習C語言指標
先看個程式,是華為2005年招聘筆試題之一 include main int p,q p a q a 2 printf a p q d n q d n p d n q p d n a q p q,p,q p getch 執行結果 a q p 3 q 42 p 46 q p 2 6.3 指標的運算 指...
c語言 指標學習
最近重翻了c語言程式設計這本書,有了一些新的感觸,這本書從資料型別 運算子和表示式 迴圈和選擇結構 輸入輸出 陣列 指標 字串 函式 構造體和檔案操作等方面來深入淺出的介紹c語言。當然最令人印象深刻的是指標。指標是存放著變數的位址的變數的資料型別,換言之,指標變數儲存的是變數的位址值,由於指標可以直...