1. 程式人生 > >C語言-指標深度分析

C語言-指標深度分析

1、變量回顧

            程式中的變數只是—段儲存空間的別名,那麼是不 

            是必須通過這個別名才能使用這段儲存空間? 

2、思考

下面的程式輸出什麼?為什麼?

1 int i = 5;   
2 int* p = &i;   
3    4 printf("%d, %p\n", i, p);   5     6 *p = 10;    7    8 printf("%d, %p\n", i, p);   

3、*號的意義

  在指標宣告時,*號表示所宣告的變數為指標 

  在指標使用時,*號表示指標所指向的記憶體空間中的

*相當於一把鑰匙,通過這把鑰匙開啟記憶體,讀取記憶體中的值。

4、例項分析

 1 #include <stdio.h>  
 2   
 3 int main()  
 4 {  
 5     int i = 0;  
 6     int* pI;  
 7     char* pC;  
 8     float
* pF;   9        10     pI = &i;   11        12     *pI = 10;   13        14     printf("%p, %p, %d\n", pI, &i, i);   15     printf("%d, %d, %p\n"sizeof(int*), sizeof(pI), &pI);   16     printf("%d, %d, %p\n"sizeof(char*), sizeof(pC), &pC);   17     printf("%d, %d, %p\n"sizeof(float*), sizeof(pF), &pF);   18        19     return 0;   20

5、傳值呼叫與傳址呼叫

  指標是變數,因此可以宣告指標引數 

  當—個函式體內部需要改變實參的值,則需要使用指標引數 (★)

  函式呼叫時實參值將複製到形參 

  指標適用於複雜資料型別作為引數的函式中

6、程式設計實驗

利用指標交換變數     26-2.c

 1 #include <stdio.h>  
 2   
 3 int swap(int* a, int* b)  
 4 {  
 5     int c = *a;  
 6       
 7     *a = *b;  
 8       
 9     *b = c;  
10 }  
11   
12 int main()  
13 {  
14     int aa = 1;  
15     int bb = 2;  
16       
17     printf("aa = %d, bb = %d\n", aa, bb);  
18       
19     swap(&aa, &bb);  
20       
21     printf("aa = %d, bb = %d\n", aa, bb);  
22       
23     return 0;  
24 }  

7、常量與指標

常量指標( p可變,p指向的內容不可變 )

                  - const int* p;   

                  - int const* p;     

指標常量p不可變,p指向的內容可變 )

                  - int* const p;    

*p與p均為常量

                  - const int* const p;     //p和p指向的內容都不可變 

8、例項分析

常量與指標     26-3.c

 1 #include <stdio.h>  
 2   
 3 int main()  
 4 {  
 5     int i = 0;  
 6       
 7     const int* p1 = &i;  
 8     int const* p2 = &i;  
 9     intconst p3 = &i;  
10     const intconst p4 = &i;  
11       
12     *p1 = 1;    // compile error  
13     p1 = NULL;  // ok  
14       
15     *p2 = 2;    // compile error  
16     p2 = NULL;  // ok  
17       
18     *p3 = 3;    // ok  
19     p3 = NULL;  // compile error  
20       
21     *p4 = 4;    // compile error  
22     p4 = NULL;  // compile error  
23       
24     return 0;  
25 }  

9、小結

            指標是C語言中一種特別的變數 

            指標所儲存的值是記憶體的地址 

            可以通過指標修改記憶體中的任意地址內容