C,C++——指针和数组

人走茶凉 提交于 2020-01-01 18:50:42

一 指针和一维数组的关系

  • 指向数组的指针变量称为数组指针变量
  • 数组名是数组首个元素的地址。 数组名可以看作是一个指针常量,不可修 改。
  • 其值为首个元素的地址值。如下用指针变量访问数组元素
    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];
    表示一个指向二维数组的指针变量,该二维数组的列数为4
    int (*p)[4]=a;
    p是一个指针变量,指向二维数组a。其值等于aa[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]均为指针变 量。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!