当前位置: 首页 > news >正文

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

先记核心原理:

  • 字符串本质: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给二级指针开辟指针数组空间
http://www.jsqmd.com/news/780413/

相关文章:

  • 2026年口碑好的天津文旅美陈装置定制综合评价公司 - 行业平台推荐
  • 基于Electron构建多AI工具桌面应用:WebView池化与状态管理实战
  • 机器人技能实验复现指南:从开源机械爪到可复现研究
  • NEMA与IEC电机标准解析及工业应用实践
  • 从零构建私有知识库:基于向量检索与RAG的AI知识引擎实践
  • 酒店住宿业数字化解决方案:从预订到客房的全链路技术实践
  • GitHub知识聚合库:如何高效利用开源项目构建个人技术学习体系
  • 寻找优质光伏电机供应商?这五个关键点帮你避坑
  • 2026.5月购机指南:性能强的游戏本五款重点推荐,ROG独占超一线性价比
  • 避坑指南:STM32 TIM DMA Burst功能配置时,DCR寄存器这几个参数千万别设错
  • 量子噪声抑制技术:从原理到工程实践
  • DVWA靶场通关指南之爆破(Brute Force)篇-中难度(Medium)
  • relic.skill:基于四维架构与本地化AI的数字记忆保存实践
  • Gemini31Pro接入企业知识库实践
  • c#插入排序
  • 美国出行距离数据集分析报告-2019年国家级人口流动与出行行为统计数据
  • 自建Signal服务器:Signal-Bastion部署与私有安全通信实践
  • AI与数据库协同工作负载编排技术解析
  • Godot游戏集成Nakama服务器:开源后端引擎与实时对战开发指南
  • GPT-5.5代码能力突破:88.7%意味着什么?
  • 基于Scallop框架的智能对话机器人:神经符号AI的工程实践
  • 什么是数据接口
  • C++编写的项目案例有哪些?
  • ARM MPAMv2架构解析:硬件隔离与虚拟化扩展
  • 设备声振温一体化监测:24小时智能值守,告别隐患停机
  • 3D数字孪生项目 LCP 优化指南
  • 从JY901S数据到实际应用:STM32CubeMX HAL实现姿态解算与OLED显示(MPU6050升级指南)
  • 低轨卫星网络中的Web服务韧性优化与辐射感知路由技术
  • 基于微信小程序的小说阅读系统(30265)
  • 从NXP高管变动看科技公司销售与市场职能的合分之道