数组指针的定义与使用

您所在的位置:网站首页 指针域怎么定义数组 数组指针的定义与使用

数组指针的定义与使用

2023-12-13 18:26| 来源: 网络整理| 查看: 265

数组指针存放数组的地址由于数组的大小和类型各有不同,所以数组指针的定义与赋值应该与具体的数组绑定。 一维数组指针定义的三种方法 一维数组指针保存一维数组的地址,是一个二级指针

1、定义一个数组,再定义一个相应的数组指针,最后将数组的地址赋值给数组指针

int a[10] = {0}; int (*p)[10]; p = &a;

2、先给数组类型取别名,用别名来定已定义数组与数组指针,最后完成赋值(不常用)

typedef int ARR[10]; // ARR 的类型为int [10],代表存放10个int类型的数组 ARR b = {0}; ARR *p = &b;

3、直接给数组指针类型取别名,用别名定义数组指针类型,最后完成赋值

typedef int (*PARR)[10]; // PARR的类型为int(*)[10],代表一个指针类型 // 这个指针类型存放int [10]类型数组的地址 int a[10] = {0}; PARR p = &a; 二维数组指针定义的三种方法 二维数组指针保存二维数组的地址,是一个三级指针,定义方法同一维数组指针的定义 // 1、直接定义后赋值 int a[2][3] = {0}; int (*p)[2][3] = &a; // 2、给二维数组类型取别名后再定义赋值 int a[2][3] = {0}; typedef int ARR[2][3]; ARR b = &a; // 3、给二维数组指针类型取别名后再定义赋值 int a[2][3] = {0}; typedef int (*PARR)[2][3]; PARR p = &a; 二维数组的地址表示以及步长

在这里插入图片描述

二维数组指针的使用(用二维数组指针遍历一个二维数组) int main06x() { int a[2][3] = { 1,2,3,4,5,6 }; int(*p)[2][3] = &a; for (int i = 0; i // *p 代表第0行的地址,*p + i 代表第i行的地址,是一个二级指针 // *((*p) + i)代表第i行第0列的地址,对行地址取*表示对应行第0列的地址 // (*((*p)+i)+j)表示第i行第j列的地址 // *(*((*p)+i)+j))表示第i行第j列的值 printf("%d ",*(*((*p)+i)+j)); printf("%d ", (*p)[i][j]);// *p ==A *(*(A+i)+j) *(A[i]+j) == A[i][j] (*p)[i][j] } } system("pause"); return 0; }

使用二维数组指针操作二维数组有点复杂,一般对二维数组的操作使用一维数组指针,即行指针

int main07() { int a[2][3] = { 1,2,3,4,5,6 }; //定义一个指针来保存 二维数组的首行地址 &a[0] == a //因为要保存第0行的地址,第0行其实就是一个一维数组,即保存一维数组的地址,一维数组 int(*p)[3] = a; for (int i = 0; i //printf("%d ",*(*(p+i)+j));//*(p[i]+j) == p[i][j] *() == [] printf("%d ",p[i][j]); printf("%d ", a[i][j]); } } system("pause"); return 0; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3