如何理解指標與陣列之間的關係

2021-08-21 23:46:35 字數 2835 閱讀 9214

1.指標是什麼?

在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為」指標」。意思是通過它能找到以它為位址的記憶體單元。

2.陣列是什麼?所謂陣列,是有序的元素序列。 若將有限個型別相同的變數的集合命名,那麼這個名稱為陣列名。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。用於區分陣列的各個元素的數字編號稱為下標。陣列是在程式設計中,為了處理方便, 把具有相同型別的若干元素按無序的形式組織起來的一種形式。 這些無序排列的同類資料元素的集合稱為陣列。陣列是用於儲存多個相同型別資料的集合

陣列的兩種初始化

char arr=  //末尾無'\0'

cahr arr="abcde"

//末尾有『\0'

3.指標陣列和陣列指標**指標陣列**:指標陣列是陣列,是乙個存放指標的陣列。

int *p[10]  //p和[10]先結合(組成陣列),再和*結合(形成陣列指標)
**陣列指標**:陣列指標是指標,這個指標是指向陣列的。

int (*p)[10]    //由於()的參與*和p先結合,p是乙個指標變數,然後指向乙個10個整數的陣列

//優先順序高於*

4.函式指標

void test()

//下面pfun1和pfun2誰能存放test函式的位址?

void (*pfun1)();

void *pfun2();

我們先來分析一下,能夠儲存位址,這就要求是乙個指標,通過上面(陣列指標和指標陣列)的判斷,我們發現*pfun1是指標。指標指向乙個無引數的函式,返回型別是void

(*(void(*)()0)()
我們從內往外一步一步來分析:

1、(void(*)()0 將0強制轉換為陣列指標

假設 a=(void(*)()0

2 、 *a 將a解引用

3、整體是個函式

void (*signal(int,void(*)(int)))(int);
1、signal是一次函式宣告

2、signal函式的引數:第乙個是int(整形),第二個是函式指標,該函式指標指向的函式引數為int,返回型別是void

5、函式指標陣列

函式指標陣列:陣列是存放相同型別資料的儲存空間,當我們把函式的位址存到乙個陣列中,這個陣列就叫做函式指標陣列。

通過指標陣列 :int *arr[10]

得到函式指標陣列:int (*arr[10])()

#include 

int add(int a, int b)

intsub(int a, int b)

int mul(int a, int b)

int div(int a, int b)

int main()

;while (input)

else

printf("操作有誤");

printf("ret=%d\n", ret);

}return

0;}

結果如下:

6、指向函式指標陣列的指標

指標指向乙個陣列,陣列的元素都是函式指標

通過函式指標陣列:int (*arr[10])()

得到函式指標陣列:int (*(*arr)[10])()

指標與陣列,指標與函式之間的關係

指標陣列,它的關鍵在於是乙個陣列,即陣列中每個元素都是指標。陣列指標,他的關鍵在於是指標變數,即這個指標指向乙個陣列。include int main 這是乙個陣列,大家都知道。int parr1 4 這是指標陣列,首先的優先順序比 的優先順序高,所以parr 先與結合,它是乙個陣列,然後再與 結合...

指標與陣列之間的關係與轉換

一 指向指標的指標 1 指向指標的指標的定義 p p 變數的位址上的數值的位址 2 指標型別要和你指向的資料或者指標型別要一致 3 指標與一維陣列的取值 a i a i a i p i p i a i a i a代表的是陣列的變數名,i是代表陣列a裡面的第i個元素 是指求括號 a i 的位址 voi...

指標陣列和陣列指標之間關係

指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣列的指標 的簡稱。1 int ptr1 10 2 int...