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

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

指针数组是C语言中一个经常出现的概念,它结合了指针和数组的特性,为程序员提供了一种高效管理多个指针的方法。指针数组的本质还是一个数组,但是这个数组的每个元素都是指针。换句话说,它是一个存储指针的数组,而不是一个指向数组的指针。
 

在C语言中,定义一个指针数组的一般语法如下:

数据类型 *数组名[数组大小];

这里,数据类型指的是指针所指向的数据类型,数组名是你给这个指针数组起的名字,数组大小则指定了数组可以存储多少个指针,*用来表明数组的每个元素都是指针。


举个具体的例子,假设我们要创建一个包含 5 个整型指针的数组,我们可以这样定义:

int *ptr_array[5];

这行代码声明了一个名为 ptr_array 的数组,它可以存储 5 个指向整数的指针。注意,此时我们只是创建了数组,还没有为这些指针赋值。
 

理解指针数组的关键在于,要认识到每个数组元素都是一个指针。这意味着我们可以让每个元素指向不同的整数变量,或者指向整数数组的不同元素。让我们通过一个更详细的例子来说明这一点:

#include <stdio.h>

int main() {
    int a = 10, b = 20, c = 30, d = 40, e = 50;
    int *ptr_array[5];

    // 将指针数组的元素指向不同的整数
    ptr_array[0] = &a;
    ptr_array[1] = &b;
    ptr_array[2] = &c;
    ptr_array[3] = &d;
    ptr_array[4] = &e;

    // 通过指针数组访问这些整数
    for (int i = 0; i < 5; i++) {
        printf("Value at ptr_array[%d] = %d\n", i, *ptr_array[i]);
    }

    return 0;
}

这段代码的输出结果如下:

Value at ptr_array[0] = 10
Value at ptr_array[1] = 20
Value at ptr_array[2] = 30
Value at ptr_array[3] = 40
Value at ptr_array[4] = 50

在这个例子中,我们创建了五个整数变量和一个能够存储 5 个整型指针的数组。然后,我们将数组的每个元素指向一个不同的整数变量。最后,我们通过遍历指针数组并解引用每个指针来打印出这些整数的值。


指针数组的一个常见应用是存储字符串。在C语言中,字符串实际上是以空字符'\0'结尾的字符数组,而字符数组的名称本质上是一个指向其第一个元素的指针。因此,我们可以使用字符指针数组来存储多个字符串。例如:

#include <stdio.h>

int main() {
    char *fruits[] = {
        "Apple",
        "Banana",
        "Cherry",
        "Date",
        "Elderberry"
    };

    int num_fruits = sizeof(fruits) / sizeof(fruits[0]);

    for (int i = 0; i < num_fruits; i++) {
        printf("Fruit %d: %s\n", i + 1, fruits[i]);
    }

    return 0;
}

这个程序的输出结果如下:

Fruit 1: Apple
Fruit 2: Banana
Fruit 3: Cherry
Fruit 4: Date
Fruit 5: Elderberry

在这个例子中,我们创建了一个字符指针数组 fruits,每个元素都指向一个字符串常量。这种方法非常高效,因为我们只存储了指向这些字符串的指针,而不是字符串本身的副本。
 

指针数组的另一个重要应用是在处理命令行参数时。当我们编写接受命令行参数的 C 程序时,main 函数通常被定义为:

int main(int argc, char *argv[])

这里的 argv 就是一个指针数组,它包含了程序启动时传递的所有命令行参数。argv[0] 通常是程序的名称,而后续的元素则是各个命令行参数。
 

总的来说,指针数组是一个用来存储指针的数组,它的每一个元素都是指针。指针数组允许我们灵活地管理多个指针,无论这些指针指向单个变量、数组还是其他数据结构
 

最后,容易和指针数组混淆的另一个概念是数组指针,如果你想了解数组指针,请转到:

相关文章