天天看點

每日C語言-數組指針和指針數組

作者:演戲生活

前言:

在了解指針數組和數組指針前,需要先了解2個知識點:

1、 數組:是一個固定長度的存儲相同資料類型的資料結構,數組中的元素被存儲在一段連續的記憶體空間中。

如 int arr[5] = {1, 2, 3, 4, 5};

數組arr裡面共有5個元素,且每個元素都是int類型。

2、 C語言中的運算符優先級。如下表:

同時,還有幾個容易出錯的優先級判定:

. 的優先級高于 * 如 *p.c 實際上等價于 *(p.c)

[] 的優先級高于 * 如 int *p[] 實際等價于 int*(p[])

函數() 優先級高于 * 如 int *fun() 實際等價于 int* (fun())

每日C語言-數組指針和指針數組

運算符優先級

正文:

1、 指針數組:

定義:若一個數組中的所有元素都是指針,那麼我們就稱它為指針數組,如:

int * arr[5] 由上述優先級可知, arr 先與[5]結合為 arr[5] ,即5個元素的數組,然後再和 int* 結合,即arr數組中每個元素都是 int* 類型。

一般形式:資料類型 *數組名[常量表達式][常量表達式]...... ;

例子:

每日C語言-數組指針和指針數組

指針數組

2、 數組指針:

定義:數組指針是指一個指針,它指向一個數組的第一個元素。可以通過對指針進行加減操作來通路數組中的其他元素,如:

int arr[5] = {1, 2, 3, 4, 5};

int (*ptr)[5] = &arr;

ptr是一個指向整型數組的指針,它指向數組arr的首位址。&arr表示數組arr的位址,因為數組名本身就是一個指向數組首元素的指針。

一般形式:data_type (*pointer_name)[array_size],其中data_type是數組元素的資料類型,pointer_name是指針變量的名稱,array_size是數組的大小。

例子:數組指針更多的應用于二維數組,如:

int a[4][3]={{1,2,3},{4,,5,6,},{7,8,9,},{10,11,12}};//定義一個二位數組,4行3列

int (*p)[3] = a ;//定義一個數組指針,指向a,數組類型為int[3]

則對指針進行加減法時,前進和後退的步長與數組指針指向的資料類型有關。p指向的資料類型為int[3],則p+1是前進3*4=12個位元組,p-1是後退3*4=12個位元組,正好是數組a所包含的每個一維數組的長度,即p+1會讓指針指向二維數組的下一行,p-1會讓指針指向二維數組的上一行。

每日C語言-數組指針和指針數組

數組指針

最後,希望各位看官可以點點贊,關注下,後面會不定期更新C語言相關知識點[靈光一閃]

繼續閱讀