Cprogramming 简明教程

Array of Pointers in C

What is an Array of Pointers?

就像整数数组保存一组整型变量, array of pointers 将保存指针类型的变量。这意味着指针数组中的每个变量都是一个指针,指向另一个地址。

array 的名称可以用作 pointer ,因为它包含数组的第一个元素的地址。如果我们将数组的地址存储在另一个指针中,那么有可能使用 pointer arithmetic 操作数组。

Create an Array of Pointers

要在 C 语言中创建指针数组,你需要按指针声明的方式声明一个指针数组。使用数据类型,然后是一个星号,后跟一个标识符(指针变量数组名),以及包含数组大小的脚本 ([])。

在指针数组中,每个元素都包含指向特定类型的指针。

Example of Creating an Array of Pointers

以下示例演示了如何创建和使用指针数组。在这里,我们声明了三个整数变量,并为访问和使用它们,我们创建了一个指针数组。借助指针数组,我们可以打印出这些变量的值。

#include <stdio.h>

int main() {
  // Declaring integers
  int var1 = 1;
  int var2 = 2;
  int var3 = 3;

  // Declaring an array of pointers to integers
  int *ptr[3];

  // Initializing each element of
  // array of pointers with the addresses of
  // integer variables
  ptr[0] = &var1;
  ptr[1] = &var2;
  ptr[2] = &var3;

  // Accessing values
  for (int i = 0; i < 3; i++) {
    printf("Value at ptr[%d] = %d\n", i, *ptr[i]);
  }

  return 0;
}

编译并执行上述代码后,将产生以下结果 −

Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200

有时,我们可能想维护一个数组,该数组可以存储指向“Int”或“Char”或任何其他可用数据类型的指针。

An Array of Pointers to Integers

以下是整数指针数组的声明:

int *ptr[MAX];

它将 ptr 声明为 MAX 整数指针数组。因此, ptr 中的每个元素都保存着一个 int 值的指针。

Example

以下示例使用三个存储在指针数组中的整数,如下所示:

#include <stdio.h>

const int MAX = 3;

int main(){

   int var[] = {10, 100, 200};
   int i, *ptr[MAX];

   for(i = 0; i < MAX; i++){
      ptr[i] = &var[i]; /* assign the address of integer. */
   }

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

   return 0;
}

编译并执行上述代码后,将产生以下结果 −

Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200

An Array of Pointers to Characters

您还可以使用一个指向字符的指针数组来存储 strings 列表,如下所示:

#include <stdio.h>

const int MAX = 4;

int main(){

   char *names[] = {
      "Zara Ali",
      "Hina Ali",
      "Nuha Ali",
      "Sara Ali"
   };

   int i = 0;

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

   return 0;
}

Output

编译并执行上述代码后,将产生以下结果 −

Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali

An Array of Pointers to Structures

当您拥有 structures 列表并想要使用指针管理它时。您可以声明一个 array of structures 来访问和操作结构列表。

Example

以下示例演示了如何使用结构的指针数组。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Declaring a structure
typedef struct {
  char title[50];
  float price;
} Book;

const int MAX = 3;
int main() {
  Book *book[MAX];

  // Initialize each book (pointer)
  for (int i = 0; i < MAX; i++) {
    book[i] = malloc(sizeof(Book));
    snprintf(book[i]->title, 50, "Book %d", i + 1);
    book[i]->price = 100 + i;
  }

  // Print details of each book
  for (int i = 0; i < MAX; i++) {
    printf("Title: %s, Price: %.2f\n", book[i]->title, book[i]->price);
  }

  // Free allocated memory
  for (int i = 0; i < MAX; i++) {
    free(book[i]);
  }

  return 0;
}

Output

编译并执行上述代码后,将产生以下结果 −

Title: Book 1, Price: 100.00
Title: Book 2, Price: 101.00
Title: Book 3, Price: 102.00