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

2021-07-10 18:45:32 字數 1669 閱讀 1533

一、首先我們從字面意思理解一下什麼是指標陣列什麼是陣列指標 1、

指標陣列:本質是乙個陣列,陣列中的每乙個元素是乙個指標。

2、陣列指標:本質是乙個指標,而指標指向乙個陣列。

二、我們該怎麼區分指標陣列和陣列指標? 1、

總共有三種表示形式:int * p[4]和int (*p)[4]和int *(p[4]),表面看起來是不是很難區分?

一般規律:int *p是乙個指標,int p[4]是乙個位址,因此我們在區分指標陣列時首先要清楚你找的物件是誰(找核心),其次我們找誰與核心最先結合(找結合)。第三步         繼續往外擴充套件,知道整個符號結合完畢。

2、找核心很容易,我們該怎麼找結合呢?這個主要看的是優先順序,在這裡我們檢視c語言符號優先順序。

我們看到c語 言運算子中[ ]運算子優先順序最高,其次是( ),再其次才是 * ,因此int *p[4],[ ]優先順序最高,p先於[ ]結合,因此int *p[4]本質上是乙個陣列,其次p陣列才會與*結合,因此我們就知道了int *p[4]是乙個指標陣列。而int (*p)[4]是乙個陣列指標,因為核心是p,p先於( )結合,其次才會與[ ]結合。以此類推int *(p[4]是乙個指標陣列),它與int *p[4]等價。

三、二維陣列與指標

1、二維陣列的定義:

int array_a [2][3]=;或者int array_a[2][3]=,};

2、指標與陣列的關係

int array_a[2][3]=;我們有兩種方法訪問array_a陣列中的某個元素,比如我們訪問第三個元素,array_a[0][2]或者*(*(array_a+0)+2)

注意:array_a、&array_a[0]、array_a的區別:

#include

int main(void)

, };

//int a[2][5] = ;

printf("a[1][3] = %d.\n", a[1][3]);

printf("a[1][3] = %d.\n", *(*(a+1)+3));

//int *p1 = a;// 型別不匹配

//int **p2 = a;// 型別不匹配

// 指標指向二維陣列的陣列名

int (*p3)[5]; // 陣列指標,指標指向乙個陣列,陣列有5個int型別元素

p3 = a; // a是二維陣列的陣列名,作為右值表示二維陣列第一維的陣列

// 的首元素首位址,等同於&a[0]

p3 = &a[0];

printf("a[0][3] = %d.\n", *(*(p3+0)+3));

printf("a[1][4] = %d.\n", *(*(p3+1)+4));

// 指標指向二維陣列的第一維

//int *p4 = &a[0];// 不可以

int *p4 = a[0];// a[0]表示二維陣列的第一維的第乙個元素,相當於是

// 第二維的整體陣列的陣列名。陣列名又表示陣列首元素

// 首位址,因此a[0]等同於&a[0][0];

int *p5 = &a[0][0];

printf("a[0][4] = %d.\n", *(p4+4));

int *p6 = a[1];

printf("a[1][1] = %d.\n", *(p6+1)); // 指向二維陣列的第二維

return 0;}

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

指標陣列 如果乙個陣列中的所有元素儲存的都是指標,那麼我們就稱它為指標陣列。除了每個元素的資料型別不同,指標陣列和普通陣列在其他方面都是一樣的,下面是 乙個簡單的例子 include int main 也可以不指定長度,直接寫作 int parr 定義乙個指向指標陣列的指標 int parr arr...

二維陣列與陣列指標以及指標陣列

示例 int buff 3 每行有3個元素 int buff2 3 部分初始化,陣列中未賦值的預設為0 int buff3 3 初始化自動計算行數,陣列中未賦值的預設為0 int buff3 3 int buff 3 3 定義二維陣列直接限制行 列,未初始化成員為隨機值 注 此處舉例均為區域性二維陣...

陣列指標與二維陣列

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