天天看點

C語言:一維數組名、數組指針的定義方式、二維數組名1 一維數組名2 數組指針的定義方式3 二維數組名

文章目錄

  • 1 一維數組名
    • 1.1 一維數組名稱的作用
    • 1.2 一維數組名的2種特例情況
  • 2 數組指針的定義方式
    • 2.1 typedef定義數組類型
    • 2.2 typedef定義數組指針類型
    • 2.3 直接定義數組指針變量
  • 3 二維數組名
    • 3.1 二維數組名的作用
    • 3.2 二維數組名的2種特例情況
    • 3.3 函數形參接收二維數組名的實參

1 一維數組名

參考本人部落格《C++數組》第2.2節一維數組的數組名。

1.1 一維數組名稱的作用

(1)統計整個數組的長度,例:sizeof(arr) / sizeof(arr[0]);

數組占用記憶體空間大小:

sizeof(arr)

數組單個元素占用記憶體空間大小:

sizeof(arr[0])

數組長度:

sizeof(arr) / sizeof(arr[0])

(2)擷取數組在記憶體中的首位址,例:arr。

擷取數組首位址:

arr

&arr[0]

注:

arr

&arr[0]

:數組首元素的位址 ;

&arr

:整個數組的位址【位址值相同,含義不同】。

1.2 一維數組名的2種特例情況

一維數組名不表示數組首元素位址的兩種特例:

sizeof(數組名)

:整個數組的大小;

&數組名

:整個數組的位址(位址值與首元素位址相同,但意義不同),表示數組指針。

注:其它情況下,一維數組的數組名均表示數組首元素位址,等價于相應的指針類型。

2 數組指針的定義方式

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

一維數組的數組指針

&arr

(一維數組取位址)的資料類型:

int (*)[6]

2.1 typedef定義數組類型

先定義數組類型,再通過數組類型定義數組指針變量。

typedef int(ARRAY_TYPE)[6];

ARRAY_TYPE *arrP = &arr;

注:

ARRAY_TYPE

是存儲6個int元素的數組類型。

2.2 typedef定義數組指針類型

先定義數組指針的類型,再通過數組指針類型定義數組指針變量。

typedef int(*ARRAY_POINTER_TYPE)[6];

ARRAY_POINTER_TYPE arrP = &arr;

2.3 直接定義數組指針變量

int (*arrP)[6] = &arr;

示例:通過數組指針通路數組元素

//*arrP等價于arr
for(int i = 0; i < 5; i++){
	printf("%d\n", (*arrP)[i]);			//[]的優先級高于*
	//printf("%d\n", *((*arrP) + i));	//等價寫法
}
           

3 二維數組名

3.1 二維數組名的作用

int arr[][3] = {{1,2,3},{4,5,6},[7,8,9]};

二維數組名

arr

相當于指向第1個一維數組的數組指針(一維數組的數組指針),資料類型為

int (*)[3]

//定義數組指針(一維數組的數組指針)
int (*pArray)[3] = arr;

//通過數組指針通路二維數組元素
printf("%d\n", arr[1][2]);
printf("%d\n",  *(*(arr + 1) + 2));
printf("%d\n",  *(*(pArray + 1) + 2));

//二維數組的本質是一維數組
//C語言中,二維數組的記憶體線性排列,按每行元素依次存儲
printf("%d\n",  *(*arr + 5));
           

3.2 二維數組名的2種特例情況

二維數組名不表示第1個一維數組的數組指針(一維數組的數組指針)的兩種特例:

sizeof(數組名)

:對二維數組名使用sizeof,表示整個數組的大小;

&數組名

:對二維數組名取位址,表示的資料類型為

資料類型:int (*)[3][3]

示例:

int arr[][3] = {{1,2,3},{4,5,6},[7,8,9]};
//對二維數組名取位址時,表示的資料類型為int (*)[3][3]
int (*p)[3][3] = &arr;
           

3.3 函數形參接收二維數組名的實參

(1)

void func(int (*arr)[3], int row, int col)

(2)

void func(int arr[3][3], int row, int col)

(3)

void func(int arr[ ][3], int row, int col)

【不建議】

繼續閱讀