指针数组

简介: 指针数组

指针数组是一个数组,它的每个元素都是一个指针。在C语言中,指针数组常用于存储指向多个相同类型数据项(如整数、字符串等)的指针。以下是一个关于指针数组的详细代码示例,包括如何声明、初始化和使用指针数组。

  #include <stdio.h> 
  #include <stdlib.h> 
  #include <string.h> 
  
  // 假设我们要存储指向字符串的指针数组 
  
  // 函数原型,用于打印指针数组中的字符串 
  void printStringArray(char** strings, int size); 
  
  int main() { 
  // 声明一个指针数组,用于存储指向字符串的指针 
  // 这里我们假设要存储5个字符串的指针 
  const int SIZE = 5; 
  char* stringArray[SIZE]; 
  
  // 为指针数组中的每个指针分配内存并初始化 
  stringArray[0] = strdup("Hello"); // 使用strdup复制字符串并分配内存 
  stringArray[1] = strdup("World"); 
  stringArray[2] = strdup("This"); 
  stringArray[3] = strdup("is"); 
  stringArray[4] = strdup("a"); 
  stringArray[4] = realloc(stringArray[4], strlen("an") + 1); // 假设我们要改变最后一个字符串 
  strcpy(stringArray[4], "an"); // 使用strcpy更新字符串内容 
  
  // 验证指针数组的内容 
  printf("The strings in the array are:\n"); 
  printStringArray(stringArray, SIZE); 
  
  // 释放之前为字符串分配的内存 
  for (int i = 0; i < SIZE; i++) { 
  free(stringArray[i]); 
  } 
  
  // 注意:stringArray本身(即指针数组)的内存是在栈上分配的, 
  // 因此不需要(也不能)手动释放。它会在main函数返回时自动释放。 
  
  return 0; 
  } 
  
  // 函数定义:打印指针数组中的字符串 
  void printStringArray(char** strings, int size) { 
  for (int i = 0; i < size; i++) { 
  printf("%s ", strings[i]); 
  } 
  printf("\n"); 
  }

代码解释:

  1. 指针数组的声明:在main函数中,我们声明了一个名为stringArray的指针数组,它能够存储5个指向char的指针(即字符串的指针)。
  2. 内存分配和初始化:使用strdup函数为每个指针分配内存并复制一个字符串。strdupPOSIX标准中的函数,它在堆上分配足够的内存来复制一个字符串,并返回指向新字符串的指针。如果系统不支持strdup,可以手动使用mallocstrcpy来实现相同的功能。
  3. 修改指针数组中的元素:我们使用realloc来重新分配最后一个字符串的内存,并使用strcpy来更新其内容。这是一个动态改变字符串内容的例子。
  4. 访问和打印指针数组:我们定义了一个printStringArray函数来遍历指针数组并打印每个指针所指向的字符串。
  5. 内存释放:在使用完字符串后,我们使用free函数来释放之前为它们分配的内存。这是非常重要的,因为忘记释放内存会导致内存泄漏。
  6. 指针数组的生命周期stringArray指针数组本身是在栈上分配的,因此它会在main函数返回时自动释放。我们不需要(也不能)手动释放它。

这个示例展示了如何使用指针数组来存储和管理多个字符串。在实际应用中,指针数组可以用于更复杂的场景,如动态数组、图的数据结构等。

目录
相关文章
|
2天前
|
编译器 vr&ar C语言
C primer plus 学习笔记 第10章 数组和指针
C primer plus 学习笔记 第10章 数组和指针
|
4天前
|
JSON Go 数据格式
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】(4)
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】
|
4天前
|
Java 编译器 Go
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】(3)
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】
|
4天前
|
存储 安全 Go
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】(2)
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】
|
4天前
|
Java Go 索引
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】(1)
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】
|
9天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
12 1
|
9天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
9 1
|
10天前
|
存储 C语言
C语言数组指针和指针数组的区别及使用方法
C语言数组指针和指针数组的区别及使用方法
11 0
|
16天前
|
存储 C语言
字符指针变量与字符数组的比较
字符指针变量与字符数组的比较
20 3
|
16天前
|
存储 C语言
指针数组作为main函数的形参
指针数组作为main函数的形参
7 0