用二级指针实现字符串数组

📅 2026/7/7 22:40:26 👁️ 阅读次数 📝 编程学习
用二级指针实现字符串数组

先记核心原理:

  • 字符串本质:char*
  • 字符串数组本质:一堆 char放一起*
  • 二级指针char**就是用来指向 char* 数组

一、原理一句话

char** str二级指针,它指向一个一维指针数组,数组里每个元素都是char*(字符串首地址)。


方式 1:直接用二级指针指向静态字符串数组

c

运行

#include <stdio.h> int main() { // 字符串常量数组:每个元素是 char* char *arr[] = { "Java", "C语言", "Python", "C++" }; // 二级指针 指向 指针数组首地址 char **str = arr; // 遍历打印 for (int i = 0; i < 4; i++) { // str[i] 等价 *(str+i),拿到每个字符串 printf("%s\n", str[i]); } return 0; }

解析

  1. char *arr[]:指针数组,存 4 个字符串地址
  2. char **str = arr:二级指针接收指针数组名
  3. 数组名本身就是首元素地址,首元素是char*,所以要用char**接收

方式 2:动态内存版(二级指针手动申请字符串数组)

适合不确定个数、动态增删场景

c

运行

#include <stdio.h> #include <stdlib.h> int main() { int n = 3; // 1. 申请n个 char* 指针的数组 char **str = (char**)malloc(n * sizeof(char*)); // 2. 给每个字符串单独申请空间 str[0] = (char*)malloc(10 * sizeof(char)); str[1] = (char*)malloc(10 * sizeof(char)); str[2] = (char*)malloc(10 * sizeof(char)); // 3. 赋值 str[0] = "北京"; str[1] = "上海"; str[2] = "广州"; // 遍历 for (int i = 0; i < n; i++) { printf("%s\n", str[i]); } // 释放内存 for (int i = 0; i < n; i++) { free(str[i]); } free(str); return 0; }

方式 3:函数参数用二级指针传字符串数组

最常用场景:子函数接收字符串数组

c

运行

#include <stdio.h> // 用二级指针接收字符串数组 void printStr(char **str, int n) { for (int i = 0; i < n; i++) { printf("%s\n", str[i]); } } int main() { char *arr[] = {"苹果", "香蕉", "橙子"}; // 传数组名,退化为二级指针 printStr(arr, 3); return 0; }

关键总结

  1. 字符串数组:char* 数组
  2. 接收它必须用:char** 二级指针
  3. 访问写法完全一样:str[i]就能当字符串用
  4. 静态用指针数组赋值,动态用malloc给二级指针开辟指针数组空间