標籤:維數 color 參數 包含 style code 資料 數組的數組 元素
1.一維數組與指標
int a[10];int *p = a;
a[i] <=>*(a+i)<=>*(p+i)
a作為一維數組的數組名,它的值是固定的。當數組名用作函數參數時,形參數組名是作為指標變數來處理的。如果用指標變數作實參,必須先使指標變數有確定值,指向一個已定義的對象。
2.二維數組與指標
定義一個二維數組int a[3][4];
從二維數組角度看,a代表二維數組首元素的地址,現在的首元素不再是一個簡單的整型元素,而是由4個整型元素所組成的一維數組,因此,a代表的是首行的首地址,a + 1代表序號為1的行的首地址。如果二維數組的首行地址是2000,一個整型資料佔4個位元組,則a + 1的值應該是2000 + 4*4 = 2016。a[0],a[1],a[2]既然是一維數組名,而C語言又規定了數組名代表數組首元素的地址,因此a[0]代表一維數組a[0]中第0列元素的地址,即&a[0][0]。a[i][j]=*(a[i] + j)=*(*(a + i) + j)。如果a是一維數組名,則a[i]代表a數組序號為i的元素的儲存單元。a[i]是有物理地址的,是占儲存單元的。但如果a是二維數組,則a[i]是一維數組名,它只是一個地址,並不代表某一元素的值(如同一維數組名只是一個指標常量一樣)。a + 1和*(a + 1)的值都是2016,但是含義是不同的,a + 1是1行首地址,*(a + 1)等價於a[1],代表的是1行0列元素a[1][0]的地址。
二維數組名是指向行的,一維數組名是指向列的。在指向行的指標前面加一個*,就轉換為指向列的指標。例如,a和a + 1是指向行的指標,在它們前面加一個*就是*a和*(a+1),它們就成為指向列的指標,分別指向a數組0行0列元素和1行0列的元素。反之,在指向列的指標前面加&,就成為指向行的指標。例如a[0]是指向0行0列元素的指標,在它前面加一個&就成為&a[0],由於a[0]與*(a+0)等價,因此&a[0]與&*a等價,也就是與a等價,它指向二維數組的0行。不要把&a[i]簡單的理解為a[i]元素的物理地址,因為並不存在a[i]這樣一個實際的資料存放區單元。它只是一種地址的計算方法,能得到第i行的首地址,&a[i]和a[i]的值是一樣的,但它們的含義是不同的。&a[i]或a+i指向行,a[i]或*(a + i)指向列。
int a[3][4] = { {1,2,3,4},{1,2,3,4},{1,3,4,4} };int (*p)[4]; //定義p為一個指標變數,指向包含4個整型元素的一維數組p = a;printf("%d", *(*(p + 1) + 2));
3.
C語言複習3/24