指针数组

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/BasicsGroup(["`Basics`"]) c(("`C`")) -.-> c/ControlFlowGroup(["`Control Flow`"]) c(("`C`")) -.-> c/CompoundTypesGroup(["`Compound Types`"]) c(("`C`")) -.-> c/PointersandMemoryGroup(["`Pointers and Memory`"]) c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c/BasicsGroup -.-> c/constants("`Constants`") c/ControlFlowGroup -.-> c/for_loop("`For Loop`") c/CompoundTypesGroup -.-> c/arrays("`Arrays`") c/PointersandMemoryGroup -.-> c/pointers("`Pointers`") c/UserInteractionGroup -.-> c/output("`Output`") subgraph Lab Skills c/constants -.-> lab-123201{{"`指针数组`"}} c/for_loop -.-> lab-123201{{"`指针数组`"}} c/arrays -.-> lab-123201{{"`指针数组`"}} c/pointers -.-> lab-123201{{"`指针数组`"}} c/output -.-> lab-123201{{"`指针数组`"}} end

整数指针数组

在这一步中,我们将访问一个整数指针数组。打开 ~/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;
}

总结

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

您可能感兴趣的其他 C 教程