數據結構復習之開題篇(必要時持續更新...)
阿新 • • 發佈:2018-02-14
ptr ++ 數組 第一個元素 賦值 red ble 1.3 算術
在復習數據結構之前有必要復習一下C語言的指針
1.指針
int* p;
一個指針類型,名為p,代表的是一個整形所存放的地址編號
1.1一個使用的實例
【註】對變量使用&操作符,意為取它所在的地址
1 #include <stdio.h>
2
3 int main()
4 {
5 int var = 20; /* 實際變量的聲明 */
6 int* ip; /* 指針變量的聲明 */
7
8 ip = &var; /* 在指針變量中存儲 var 的地址 */
9
10 printf("Address of var variable: %p\n ", &var );
11
12 /* 在指針變量中存儲的地址 */
13 printf("Address stored in ip variable: %p\n", ip );
14
15 /* 使用指針訪問值 */
16 printf("Value of *ip variable: %d\n", *ip );
17
18 return 0;
19 }
1.2一個容易搞混的東西
int* p = NULL;
意為對指針p賦值為NULL,而不是對*p賦值
1.3指針的算術運算
假設p是一個指向地址為1000的整形指針,是一個32位整數 讓我們對該指針執行下列的算術運算: p++; 在執行完上述的運算之後,p 將指向位置 1004,因為 p 每增加一次,它都將指向下一個整數位置,即當前位置往後移 4 個字節。這個運算會在不影響內存位置中實際值的情況下,
移動指針到下一個內存位置。如果 p 指向一個地址為 1000 的字符,上面的運算會導致指針指向位置 1001,因為下一個字符位置是在 1001
1.3.1遞增一個指針
1 當一個指針指向一個數組時,當遞增該指針時,表示指向數組的下一項
2 #include <stdio.h>
3
4 const int MAX = 3;
5
6 int main ()
7 {
8 int var[] = {10 , 100, 200};
9 int i, *ptr;
10
11 /* 指針中的數組地址 */
12 ptr = var;
13 for ( i = 0; i < MAX; i++)
14 {
15
16 printf("存儲地址:var[%d] = %x\n", i, ptr );
17 printf("存儲值:var[%d] = %d\n", i, *ptr );
18
19 /* 移動到下一個位置 */
20 ptr++;
21 }
22 return 0;
23 }
24
25 /* 輸出的結果為 */
26 存儲地址:var[0] = bf882b30
27 存儲值:var[0] = 10
28 存儲地址:of var[1] = bf882b34
29 存儲值: var[1] = 100
30 存儲地址:of var[2] = bf882b38
31 存儲值:var[2] = 200
1.3.2指針的比較
指針可以用關系運算符進行比較,如 ==、< 和 >。如果 p1 和 p2 指向兩個相關的變量,比如同一個數組中的不同元素,則可對 p1 和 p2 進行大小比較
下面的程序修改了上面的實例,只要變量指針所指向的地址小於或等於數組的最後一個元素的地址 &var[MAX - 1],則把變量指針進行遞增
1 #include <stdio.h>
2
3 const int MAX = 3;
4
5 int main ()
6 {
7 int var[] = {10, 100, 200};
8 int i, *ptr;
9
10 /* 指針中第一個元素的地址 */
11 ptr = var;
12 i = 0;
13 while ( ptr <= &var[MAX - 1] )
14 {
15
16 printf("Address of var[%d] = %x\n", i, ptr );
17 printf("Value of var[%d] = %d\n", i, *ptr );
18
19 /* 指向上一個位置 */
20 ptr++;
21 i++;
22 }
23 return 0;
24 }
數據結構復習之開題篇(必要時持續更新...)