指针数组与数组指针识别

指针数组:首先它是一个数组,什么样的数组呢?数组里面的每个元素不是值而是指针。

int* a[4];a是一个数组,数组中存放4个整型类型的指针。

数组指针:首先它是一个指针,什么样的指针呢?指向数组的指针。

int (*p)[4];p是一个指针,指针指向的是存放4个整型数据的数组。

例:int arr[5]; arr与[]结合,说明是一个数组,数组中存放5个整型类型的数据(数组里面存放的数据类型是int)。

        int*p;*说明p是指针变量,int 说明p指向的数据的类型是int。

        int **ps;ps是二级指针,二级指针也是指针,用来存放一级指针的地址。

       int* parr1[10];parr1与[]结合,说明是一个数组,数组里面存放的元素的类型是int*。

        int(*parr2)[10];parr2与*结合,说明是一个指针,该指针能够指向一个数组,数组10个元素,每个元素的类型是int。

        int(*parr3[10])[5];parr3先与[]结合,说明是一个数组,parr3是一个存放数组指针的数组,该数组能够存放10个数组指针,每个数组指针能够指向一个数组,数组5个元素,每个元素是int类型。可以把 int(*parr3[10])[5];进行拆分,因为parr3与[]结合,所以可以用一个字母p来代替,int(*parr3[10])[5];可以写成int(*p)[5],int(*p)[5]是一个数组指针,什么样的指针呢?该指针指向一个数组,数组5个元素,每个元素的类型是int。

int* arr2[20] = { 0 };arr2和[]结合,说明是数组,即是指针数组,数组的每个元素是int*,数组的每个元素是指针。

test2(arr2);

arr2是数组首元素的地址,即arr2[0]的地址,arr2[0]存放的是指针,即int*的地址,即int**

void test2(int **arr) {

}

//void test2(int *arr[20]) {
//}

int arr1[3][5] = { 0 };  arr1是3行5列的二维数组,一共3行,每一行有5个元素。

test(arr1);

arr1是数组首元素的地址,二维数组的首元素是数组第一行的地址,第一行也是一个数组(存放5个元素的数组)。是地址就可以用指针来接收。二维数组的数组名和二级指针毫无关系。

 int (*arr)[5] arr与*结合,说明是数组指针,什么样的指针呢?该指针指向一个数组,数组5个元素,每个元素的类型是int。

void test(int (*arr)[5]) { 



}

猜你喜欢

转载自blog.csdn.net/Jushuzhan/article/details/125803622