指针数组

CBeginner
立即练习

介绍

在 C 编程中,指针数组(array of pointers)是一种数组,其中每个元素都是指向其他数据类型(如 int、char、float 等)的指针。在本实验中,我们将学习如何访问整数指针数组和字符指针数组。

整数指针数组

在这一步中,我们将访问一个整数指针数组。打开 ~/project/ 目录下的 main.c 文件,并粘贴以下代码:

#include <stdio.h>

// 全局声明
const int MAX = 5;

int main() {
  printf("\n\n\t\t==== 整数指针数组 ====\n\n\n");

  int var[] = {10, 20, 30, 40, 50}; // 初始化一个整数数组(此处为 var)
  int i = 0;

  /*
      ptr 是一个整数指针数组,即
      它存储了每个数组元素的地址
  */
  int *ptr[MAX];

  for(i = 0; i < MAX; i++) {
    /*
        将每个数组元素的地址
        赋值给 ptr 数组
    */
    ptr[i] = &var[i];
  }

  for(i = 0; i < MAX; i++) {
    /*
        ptr[i] 存储了 var[i] 元素的地址。
        因此,*ptr[i] 返回存储在 ptr[i] 位置的
        元素的值
    */
    printf("Value of var[%d] = %i\n\n", i, *ptr[i]);
  }

  printf("\n\n\t\t==== 程序结束 ====\n\n\n");
  return 0;
}

该程序初始化了一个整数指针数组,并将每个数组元素的地址赋值给指针数组。然后,通过指针数组打印每个元素的值。

字符指针数组

在这一步中,我们将访问一个字符指针数组。在上一步代码之后粘贴以下代码:

#include <stdio.h>

// 全局声明
const int MAX = 4;

int main() {
  printf("\n\n\t\t==== 字符指针数组 ====\n\n\n");

  char *names[] = {"Google", "Amazon", "Facebook", "Apple"}; // 初始化一个字符指针数组(此处为 names)
  int i = 0;

  for(i = 0; i < MAX; i++) {
    printf("Value of names[%d] = %s\n\n", i, names[i]);
  }

  printf("\n\n\t\t==== 程序结束 ====\n\n\n");
  return 0;
}

该程序初始化了一个字符指针数组,并将每个字符串的首字符地址赋值给指针数组。然后,通过指针数组打印每个元素的完整名称。

编译并运行程序

在这一步中,我们将编译并运行程序。打开终端并导航到 ~/project/ 目录。输入以下命令以编译程序:

gcc main.c -o main

编译成功后,输入以下命令以运行程序:

./main

该命令将执行程序并在终端显示输出:

  ==== 整数指针数组 ====


Value of var[0] = 10

Value of var[1] = 20

Value of var[2] = 30

Value of var[3] = 40

Value of var[4] = 50


  ==== 字符指针数组 ====


Value of names[0] = Google

Value of names[1] = Amazon

Value of names[2] = Facebook

Value of names[3] = Apple


  ==== 程序结束 ====

完整代码

#include <stdio.h>

// 全局声明

const int MAX = 5;

int main() {
  printf("\n\n\t\t==== 整数指针数组 ====\n\n\n");

  int var[] = {10, 20, 30, 40, 50}; // 初始化一个整数数组(此处为 var)
  int i = 0;

  /*
      ptr 是一个整数指针数组,即
      它存储了每个数组元素的地址
  */
  int *ptr[MAX];

  for(i = 0; i < MAX; i++) {
    /*
        将每个数组元素的地址
        赋值给 ptr 数组
    */
    ptr[i] = &var[i];
  }

  for(i = 0; i < MAX; i++) {
    /*
        ptr[i] 存储了 var[i] 元素的地址。
        因此,*ptr[i] 返回存储在 ptr[i] 位置的
        元素的值
    */
    printf("Value of var[%d] = %i\n\n", i, *ptr[i]);
  }

  printf("\n\n\t\t==== 字符指针数组 ====\n\n\n");

  char *names[] = {"Google", "Amazon", "Facebook", "Apple"}; // 初始化一个字符指针数组(此处为 names)
  i = 0;

  for(i = 0; i < MAX; i++) {
    printf("Value of names[%d] = %s\n\n", i, names[i]);
  }

  printf("\n\n\t\t==== 程序结束 ====\n\n\n");
  return 0;
}

总结

在本实验中,我们学习了如何访问整数指针数组和字符指针数组。指针数组是一种数组,其中每个元素都是指向另一种数据类型的指针。我们学习了如何初始化指针数组、如何将数组元素的地址赋值给指针数组,以及如何使用指针数组访问数组元素。