数组指针的定义与使用
程序员文章站
2024-02-26 18:49:46
...
数组指针存放数组的地址由于数组的大小和类型各有不同,所以数组指针的定义与赋值应该与具体的数组绑定。
一维数组指针定义的三种方法
一维数组指针保存一维数组的地址,是一个二级指针
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 < sizeof(a) / sizeof(a[0]); i++)
{
for (int j = 0; j < sizeof(a[0]) / sizeof(a[0][0]); j++)
{
// *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 < sizeof(a) / sizeof(a[0]); i++)
{
for (int j = 0; j < sizeof(a[0]) / sizeof(a[0][0]);j++)
{
//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;
}
下一篇: 产品定位:你是钉子,还是棒槌?
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第20章:接口的定义与使用:课时91:代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时29:数组与方法
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时26:数组引用传递分析
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时34:对象数组
-
数组指针的定义与使用
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第30章:链表的定义与使用:课时139:根据索引取得数据
-
数组的定义与使用总结
-
STM32F103 官方库的使用注意 关于宏定义 STM32F10X_MD
-
java枚举类的定义和使用
-
【阿里云】Java面向对象开发课程笔记(二)——数组的定义与使用