C語言筆記(二維數組與數值指針)

1、關於二維數組和二維數組區別編程

(1)一維數組在內存中是連續分佈存儲的,一樣,二維數組也是在內存連續存儲的。因此從內存的角度來分析,一維數組和二維數組其實沒有本質區別。數組

(2) 二維數組可使用一維數組來代替。可是在實際的應用中,有時候使用二維數組會更加直觀,方便程序的編程。學習

(3)二者在內存使用效率上是如出一轍的。測試

 

2、二維數組的第一維和第二維概念spa

(1)例如 int a[2][5]中,前面的2表示第一維;後面的5表示第二維指針

(2) 二維數組的第一維表示最外部的那一層,第一維自己也是一個數組,裏面存放了2個元素,這兩個元素就分別是第二維的數組。第二維數組自己也是一個數組,裏面存放的元素是普通的int型變量。code

3、二維數組的下標訪問視頻

例1:blog

1      int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}}; 2      int (*p)[5]; // 定義一個數組指針
3      p = a; 4      
5      printf(" a[1][2] = %d.\n", a[1][2]);     // a[1][2] = 8
6      printf("(*(p+1)+1) = %d.\n", *(*(p+1)+2)); // a[1][2]

運行結果:教程

 

4、關於二維數據必需要明白的幾個符號

例2:理解 a 、&a、 a[0]、 &a[0]、 a[0][0]、 &a[0][0]

 1 /*
 2  二維數組的幾個符號的測試  3  一、a等同於&a[0]  4  二、a[0]等同於&a[0][0]  5  三、在數值上 a、&a、a[0]、&a[0]、&a[0][0] 是相等的,可是在類型上面是有區別的。  6 */
 7     int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};  8     
 9     printf("a = %p.\n", a);        // a 類型是 int (*)[5]
10     printf("&a = %p.\n", &a);       // &a 類型是 int (*)[2][5]
11     printf("a[0] = %p.\n", a[0]);     // a[0] 類型是 int *
12     printf("&a[0] = %p.\n", &a[0]);    // &a[0] 類型是 int (*)[5]
13     printf("a[0][0] = %d.\n", a[0][0]);  // a[0][0] 類型是 int 
14     printf("&a[0][0] = %p.\n", &a[0][0]); // &a[0][0]類型是 int *

運行結果:

 

例3:第一維和第二維的數組指針的使用

 1     // 二維數組與指針的結合使用
 2     int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};  3     
 4     int (*p1)[5]; // 數組指針
 5     int *p2;      // 通常指針
 6     p1 = a;       // 等同 p1 = &a[0]; // 指向二維數組的數組名
 7     p2 = a[0];    // 等同 p2 = &a[0][0]; // 指向二維數組的第一維數組
 8 
 9     printf("a[0][2] = %d.\n", *(*(p1+0)+2));  // a[0][2] = 3
10     printf("a[1][2] = %d.\n", *(*(p1+1)+2));  // a[1][2] = 8
11      
12     printf("a[0][2] = %d.\n", *(p2+2));       // a[0][2] = 3
13     printf("a[0][4] = %d.\n", *(p2+4));       // a[0][4] = 5

運行結果:

 

5、總結

(1)須要理解二維數組的實質和幾個符號的含義。

(2)二維數組和數組指針二者是有緊密的關係的。學會使用數組指針來操做二維數組,重在實踐操做使用就會加深理解。

 

注:學習筆記部分是在朱有鵬老師物聯網視頻教程中摘取,特此聲明。http://www.zhulaoshi.org/

相關文章
相關標籤/搜索