一 指针和一维数组的关系
- 指向数组的指针变量称为数组指针变量
- 数组名是数组首个元素的地址。 数组名可以看作是一个指针常量,不可修 改。
- 其值为首个元素的地址值。如下用指针变量访问数组元素
int a[]={12,22,32,42,52,62,72,82,92,102};
int *pa=a;
//指针变量p指向数组a的首地址 。pa等价于a- 用指针变量对数组元素的访问可以采用下标形式和指针形式两种
下标形式:p[i]
指针形式:*(p+i)
举例
for(int i=0;i<5;i++)
{
//使用数组方式
cout << p1[i] << " ";
cout << b[i] << " ";
//使用指针运算符
cout << *(p1+i) << " ";
cout << *(b +1) << " ";
}
二 指针和多维数组关系
- C++允许把一个二维数组分解为多个一维数组来处理。数组名是首个元素 (一维数组)的地址。如下所示定义一个二维数组a
int a[3][4]=
{
{11,12,13,14},
{21,32,23,24},
{31,32,33,34},
}
二维数组a可以分解为一维数组a[0],a[1],a[2]。如下图所示
数组指针
- 数据类型为数组的指针,称为数组指针。用于存放数组地址的指针
- 二维数组指针变量的定义:
数据类型名 (*指针变量名)[维数1];
- n维数组指针变量的定义:数据类型名 (*指针变量名)[维数n-1]…[维数1];
- 注意:“(*指针变量名)”两边的括号不可少,如缺少括号则表示是指针数 组。
定义:int (*p)[4];
表示一个指向二维数组的指针变量,该二维数组的列数为4int (*p)[4]=a;
p是一个指针变量,指向二维数组a。其值等于a
、a[0]
、或&a[0][0]
取值*(ptr+i)
:表示第i个一维数组 首个元素的地址(类型降级 int[] * —int *)*(ptr+i)+j
:表示第i个一维数组 的第j个元元素的地址*(*(ptr+i)+j)
:表示二维数组名[i][j]
int a[3][4] = { {11,12,13,14}, {21,32,23,24}, {31,32,33,34}, };
int(*ptr)[4] = a;//ptr 和 a,等效
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
//cout << ptr[i][j]<<" ";
cout << *(*(ptr + i) + j) << " ";
//cout << a[i][j] << " ";
//cout << *(*(a + i) + j) << " ";
}
cout << endl;
}
指针给数组赋值
int a[3][4];
int *pi = a[0];
for (int i = 0; i < 3; i++, pi += 4)
{
for (int j = 0; j < 4; j++)
{
pi[j] = i * j;
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("pi[%d][%d]=%d\n", i, j, a[i][j]);
}
}
指针数组
数据元素均为指针类型的数组,称为指针数组。定义如下类型名* 数组名[长度] = {0};
int *p[4];
表示p是一个指针数组,4个下标变量p[0]、p[1]、p[2]、p[3]均为指针变 量。
来源:CSDN
作者:Babysbreath.N
链接:https://blog.csdn.net/qq_42716155/article/details/103794259