C语言——数组指针

07-19 1769阅读

数组指针

数组指针是指向一个数组的指针。在C语言中,数组名在大多数情况下会退化为指向其首元素的指针,但这并不直接等同于数组指针。一个真正的数组指针是指向一个固定大小的数组类型的指针。然而,C语言标准并不直接支持指向未知大小的数组的指针(除了通过指针和长度参数手动管理,如字符串和malloc分配的内存那样)。但是,你可以通过指向具有已知大小的数组类型的指针来模拟这一行为。

C语言——数组指针
(图片来源网络,侵删)

数组指针的使用

假设我们有一个二维数组 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;
}

解释

  1. int (*p)[4] = a;: 这里 p 是一个指向整型数组(每个数组有4个元素)的指针。a 是数组名,指向数组的第一个元素(即 a[0] 的首地址)。
  2. *(*(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;
    }
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]