呼叫二維陣列來理解陣列指標與指標陣列

2021-10-03 19:51:48 字數 1312 閱讀 7879

二維陣列:二維陣列可以看作是乙個一維陣列,在本質上是以陣列為陣列元素的陣列。從記憶體空間上看,int a[2][5]和int a[10]同樣占用連續的10個int型空間。

陣列指標:一般短語前面做修飾,後面為名詞。陣列指標,顧名思義本質上是一種指標,用於指向陣列的首元素首位址,即叫陣列指標。定義的方法為:int (* p)[5]; _注意:[ ]的優先順序高於 _

指標陣列:本質上是乙個陣列,陣列裡存放的資料是指標型別的變數,即叫指標陣列。定義的方法為:int *p[5];

方法一:通過陣列下標呼叫,不做介紹;

方法二:通過指標呼叫:

利用陣列指標,**如下:

void test03()

, };

int(*p)[2] = arr;

printf("陣列的位址是=0x%p.\n", p);

printf("陣列第一維的位址是=0x%p.和0x%p.\n", p, p + 1);

printf("陣列第二維的位址是=0x%p.和0x%p.和0x%p.和0x%p.\n", *p, (*p) + 1, *(p + 1), *(p + 1) + 1);

printf("陣列的值是=%d.和%d.和%d.和%d.\n", **p, *((*p) + 1),* (*(p + 1)), *(*(p + 1) + 1));

}

結果如下:

利用指標陣列呼叫,**如下:

void test02()

, };

int* p[2] = ;

//指標陣列表示位址

printf("指標陣列表示陣列位址\n");

printf("指標陣列的位址是=0x%p.\n", p);

printf("陣列第一維的位址是=0x%p.和0x%p.\n", p[0], p[1]);

printf("陣列第二維的位址是=0x%p.和0x%p.和0x%p.和0x%p.\n", p[0], p[0] + 1, *(p + 1), *(p + 1) + 1);

printf("陣列的值是=%d.和%d.和0%d.和%d.\n", **p, *((*p) + 1), *(*(p + 1)), *(*(p + 1) + 1));

總結:不論是用陣列指標還是指標陣列呼叫二維陣列a[i][j]的形式都是

((p+i)+j)

陣列指標 指標陣列 二維陣列如何理解與使用

首先它是乙個指標,它指向乙個陣列,在32位系統下任何型別的指標所佔記憶體大小都為4個位元組,至於它指向的陣列佔多少位元組,具體要看陣列的大小。總之,陣列指標即為 指向陣列的大小 例如 int p 4 定義了乙個陣列指標,該指標變數儲存的是乙個陣列的首位址,它可以指向乙個含有4個整型元素的陣列。1 對...

二維陣列 指標陣列與陣列指標

一 首先我們從字面意思理解一下什麼是指標陣列什麼是陣列指標 1 指標陣列 本質是乙個陣列,陣列中的每乙個元素是乙個指標。2 陣列指標 本質是乙個指標,而指標指向乙個陣列。二 我們該怎麼區分指標陣列和陣列指標?1 總共有三種表示形式 int p 4 和int p 4 和int p 4 表面看起來是不是...

陣列指標與二維陣列

陣列指標的概念一直就沒理解太清楚,中間有很多次,以為清楚了,但是還沒有真正的了解清楚。要洞察這裡面的問題,就首先要了解編譯器在這裡面做了什麼。char a 6 這裡宣告並定義了乙個二維陣列,編譯器採用直接賦值的方式給一塊連續記憶體賦值。char b 6 a 這裡宣告並定義了乙個陣列指標,指向二維陣列...