C语言——数组指针
数组指针
数组指针是指向一个数组的指针。在C语言中,数组名在大多数情况下会退化为指向其首元素的指针,但这并不直接等同于数组指针。一个真正的数组指针是指向一个固定大小的数组类型的指针。然而,C语言标准并不直接支持指向未知大小的数组的指针(除了通过指针和长度参数手动管理,如字符串和malloc分配的内存那样)。但是,你可以通过指向具有已知大小的数组类型的指针来模拟这一行为。
(图片来源网络,侵删)
数组指针的使用
假设我们有一个二维数组 int a[3][4];,我们可以这样使用数组指针:
#include int main() { int a[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; // 将数组名作为指针使用 int (*p)[4] = a; // p 是一个指向 int[4] 的指针,指向第一行的首地址 // 使用数组指针访问元素 printf("%d\n", *(*(p + 1) + 2)); // 输出第二行第三列的值,即7 // 使用数组名和下标访问元素 printf("%d\n", a[1][2]); // 也是输出7 return 0; }
解释
- int (*p)[4] = a;: 这里 p 是一个指向整型数组(每个数组有4个元素)的指针。a 是数组名,指向数组的第一个元素(即 a[0] 的首地址)。
- *(*(p + 1) + 2): 这里 p + 1 移动指针到第二行的首地址(即 a[1] 的首地址)。然后 *(p + 1) 解引用指针,获取第二行的首地址。最后 + 2 进行索引操作,访问第二行第三列的元素。
数组指针的运算
- p[n]: 访问第 n 行的首地址。
- *(p + n): 也是访问第 n 行的首地址。
- *(p[n] + m): 访问第 n 行第 m 列的元素。
示例:输出二维数组任意行列的数
#include void inputArr(int *pm,int *pn) { printf("请输入行列值:\n"); scanf("%d%d",pm,pn); } int getData(int (*p)[4],int row,int list) //定义了一个数组指针用来接收arr { int data; data = *(*(p+row)+list); return data; } int main() { int row,list; int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int data; inputArr(&row,&list); //保证调用的函数内的操作可以保留在main函数中,传递地址作为参数 data = getData(arr,row,list); printf("%d行%d列的值是:%d",row,list,data); return 0; }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。