首页 > 编程笔记 > C语言笔记(精华版)

C语言数组指针的定义和使用(附带示例)

在C语言中,数组指针是一个常见,但容易让初学者感到困惑的概念。数组指针实际上是一个指向数组的指针,而不是指向单个元素的指针。这个概念的核心在于理解数组指针是指向整个数组的,而不是数组中的某个元素。
 

让我们深入探讨数组指针的定义和用法,以便更好地理解这个概念。


数组指针的定义形式如下:

数据类型 (*指针变量名)[数组大小];

这里的数据类型,表示的是指针指向的数组中每个元素的类型。括号( )是必须的,因为它改变了运算符的优先级;如果没有括号,编译器会将其解释为一个指针数组
 

指针数组和数组指针是完全不同的两个概念。所谓指针数组,是说数组中的每个元素都是指针。指针数组的本质是数组,而数组指针的本质却是指针。如果你想深入了解指针数组,请转到:


让我们通过一个具体的例子来说明数组指针的定义和使用:

#include <stdio.h>

int main() {
    int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    int (*p)[4];  // 定义一个指向含有 4 个整数元素的数组的指针
    
    p = arr;  // 将 p 指向二维数组 arr 的第一行
    
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", p[i][j]);  // 使用数组指针访问元素
        }
        printf("\n");
    }
    
    return 0;
}

在这个例子中,我们定义了一个指向含有 4 个整数元素的数组的指针 p。然后,我们将 p 指向二维数组 arr 的第一行。由于 arr 是一个 3x4 的二维数组,每一行都是一个包含 4 个整数的数组,因此 p 可以完美地指向 arr 的每一行。
 

输出结果:

1 2 3 4 
5 6 7 8 
9 10 11 12 

 

数组指针的一个重要应用是在处理多维数组时。当我们需要传递一个多维数组给函数时,使用数组指针可以简化函数声明并提高代码的可读性。例如:

#include <stdio.h>

void printArray(int (*arr)[4], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    printArray(arr, 3);
    return 0;
}

在这个例子中,printArray 函数接受一个指向含有 4 个整数元素的数组的指针作为参数。这使得我们可以轻松地传递二维数组给函数,而不需要指定所有的维度。


理解数组指针的关键在于认识到它指向的是整个数组,而不是单个元素。这意味着当我们对数组指针进行算术运算时,它会以整个数组的大小为单位进行移动。例如,如果 p 是一个指向 int[4] 的指针,那么 p+1 会让指针向前移动 4 个 int 的大小,而不是 1 个 int 的大小。

相关文章