用二级指针实现字符串数组
先记核心原理字符串本质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] 等价 *(stri)拿到每个字符串 printf(%s\n, str[i]); } return 0; }解析char *arr[]指针数组存 4 个字符串地址char **str arr二级指针接收指针数组名数组名本身就是首元素地址首元素是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; }关键总结字符串数组char* 数组接收它必须用char** 二级指针访问写法完全一样str[i]就能当字符串用静态用指针数组赋值动态用malloc给二级指针开辟指针数组空间
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2596604.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!