C語言複習3/24

來源:互聯網
上載者:User

標籤:維數   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.