头文件:

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

函数原型:

char ** createBuff(char **buff, int arraylength, int charLength); //创建二级指针

void initDemo(char **buff, int arrayLength);    //初始化二级指针

void destoryBuff(char **buff, int arrayLength);    //销毁二级指针

void printBuff(char ** buff, int arrayLength);    //遍历二级指针

void sortBuffArray(char ** buff, int arrayLength);    //排序

实现函数:

 char ** createBuff(char **buff, int arrayLength, int charLength){

     int i;

     buff = (char **)malloc(sizeof(char *) * arrayLength); //给*buff分配空间,buff指向它的首地址

     for (i = ; i < arrayLength; ++i){

         buff[i] = (char *)malloc(sizeof(char) * charLength); //*buff[i]分配空间,buff[i]指向它的首地址

     }

     return buff;
} void initDemo(char **buff, int arrayLength){ int i; for (i = ; i < arrayLength; ++i){ sprintf(buff[i], "%d%d%d", i + , i + , i + ); }
} void destoryBuff(char **buff, int arrayLength){ int i; for (i = ; i < arrayLength; ++i){ if(buff[i] != NULL){ free(buff[i]); buff[i] = NULL; } } if(buff != NULL){ free(buff); buff = NULL; }
} void printBuff(char ** buff, int arrayLength){ int i ; for (i = ; i < arrayLength; ++i){
printf("%s\n", buff[i]);
}
} void sortBuffArray(char ** buff, int arrayLength){ int i, j; char *temp = NULL; for( i = ; i < arrayLength; ++i){ for(j = i + ; j < arrayLength; ++j){ if(strcmp(buff[j], buff[i]) > ){ temp = buff[i]; buff[i] = buff[j]; buff[j] = temp; } } } }

测试:

void main(){

    int arrayLength = , charLength = ;

    char **buff = NULL;

    buff = createBuff(buff, arrayLength, charLength);

    initDemo(buff, arrayLength);

    printf("排序前\n");

    printBuff(buff, arrayLength);

    sortBuffArray(buff, arrayLength);

    printf("排序后\n");

    printArray(buff, arrayLength);

    destoryBuff(buff, arrayLength);

    system("pause");
}

注意:

char **buff 变量不能当作实参传入到createBuff函数中的形参,以为createBuff函数调用结束会释放掉形参buff ,因此只能当作返回值返回或者,函数中定义三级指针,调用时传入buff的地址即可。

C语言实现二级指针表示字符串数组的更多相关文章

  1. C语言 字符串指针和字符串数组使用区别

    字符串指针和字符串数组使用区别 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 ...

  2. 论C语言中二级指针和二维数组之间的区别

    刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...

  3. C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数

    1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...

  4. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

  5. C语言学习018:strdup复制字符串数组

    在C语言学习005:不能修改的字符串中我们知道字符串是存储在常量区域的,将它赋值给数组实际是将常量区的字符串副本拷贝到栈内存中,如果将这个数组赋值给指针,我们可以改变数组中的元素,就像下面那样 int ...

  6. C语言复习: 二级指针和多级指针

    二级指针内存模型建立 void main2() {     int i = 0;       //指针数组     char * p1[] = { "123", "456 ...

  7. int (*p)[4] p 是二级指针 二维数组 二级指针 .xml

    pre{ line-height:1; color:#2f88e4; background-color:#e9ffff; font-size:16px;}.sysFunc{color:#3d7477; ...

  8. 由链表初始化看C语言的二级指针

    先来看C语言创建链表.插入节点和遍历链表的一段代码: #include <stdio.h> #include <stdlib.h> typedef int ElemType; ...

  9. C++ 字符串指针与字符串数组

    在做面试100题中第21题时,发现char *astr="abcdefghijk\0";和char astr[]={"abcdefghijk"};有点区别,以前 ...

随机推荐

  1. JVM系列(3)- Java VisualVM使用

    前言 Java VisualVM是jdk自带一款工具,可以十分友好的监控java进程相关的应用服务及中间件. 工具位置 jdk的bin目录下,找到jvisualvm.exe,双击打开即可. 功能介绍 ...

  2. echarts3.x 入门

    echarts 使用 1.getStart 1.1引入 echart <!-- 引入 ECharts 文件 --> <script src="echarts.min.js& ...

  3. Java并发编程实战笔记—— 并发编程3

    1.实例封闭 class personset{ private final Set<Person> myset = new HashSet<Person>(); public ...

  4. 测试自动化:java+selenium3 UI自动化(2) - 启动Firefox

    1. selenium和浏览器 基于selenium的这套自动化体系,其实现关键就在于对于各浏览器的顺畅操作. 事实上当selenium刚开始起家的时候,他使用的还是javascript注入的方式来驱 ...

  5. 洛谷 P2787 语文1(chin1)- 理理思维

    题意简述 维护字符串,支持以下操作: 0 l r k:求l~r中k的出现次数 1 l r k:将l~r中元素赋值为k 2 l r:询问l~r中最大连续1的长度 题解思路 珂朵莉树暴力赋值,查询 代码 ...

  6. node爬虫的几种简易实现方式

    说到爬虫大家可能会觉得很NB的东西,可以爬小电影,羞羞图,没错就是这样的.在node爬虫方面,我也是个新人,这篇文章主要是给大家分享几种实现node 爬虫的方式.第一种方式,采用node,js中的 s ...

  7. Mac 打造开发工作环境

    近日公司配的dell笔记本越来越难担重任(主要是CPU太差,本人是Java开发,IDE一编译CPU就100%),于是狠下心入手了一台常规顶配Macbook Pro,现记录新本本的调教过程. Homeb ...

  8. java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present解决方案

    因为JAXB-API是java ee的一部分,在jdk9中没有在默认的类路径中: java ee api在jdk中还是存在的,默认没有加载而已,jdk9中引入了模块的概念,可以使用 模块命令--add ...

  9. CentOS -- RocketMQ 4.3.2 standalone Installation and Configuration

    1 Download RockeMQ Package: You need to download it and put it to the OS Image. wget http://apache.c ...

  10. HDU 6040

    题意略. 思路:题目就是在询问你m次,第k小是哪个数.首先我们可以想到直接排序后,即可O(1)来查找询问.但是题目中n的范围给的是1e7, 无法承受nlogn的复杂度.从而想到另外一种求静态第k小的方 ...