数组指针:高效操作多维数组

数组指针的概念

数组指针是指向数组的指针,可以指向整个数组而非单个元素。声明时需要指定数组的类型和大小,例如int (*ptr)[5]表示指向包含5个整数的数组的指针。

数组指针的声明与初始化

声明数组指针时需要明确数组的维度:

intarr[5]={1,2,3,4,5};int(*ptr)[5]=&arr;// ptr指向包含5个int的数组

通过数组指针访问元素

使用解引用和下标访问数组元素:

intfirst_element=(*ptr)[0];// 访问第一个元素intthird_element=(*ptr)[2];// 访问第三个元素

数组指针与二维数组

数组指针常用于处理二维数组,以下是一个示例:

intmatrix[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int(*ptr)[4]=matrix;// 指向包含4个int的数组的指针// 访问第二行第三列的元素intvalue=ptr[1][2];// 值为7

数组指针与指针数组的区别

  • 数组指针:指向数组的指针,如int (*ptr)[5]
  • 指针数组:存储指针的数组,如int *arr[5]

动态分配多维数组

数组指针可用于动态分配多维数组:

int(*dynamic_matrix)[4]=malloc(3*sizeof(int[4]));dynamic_matrix[1][2]=42;// 赋值free(dynamic_matrix);// 释放内存

注意事项

  • 数组指针的步长以整个数组为单位,例如ptr + 1会移动sizeof(int[5])字节。
  • 避免越界访问,确保指针始终指向有效的数组内存。
  • 区分数组指针和指向数组首元素的指针(int *p = arr)。