C语言实现二级指针表示字符串数组

头文件:

#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);    //排序

实现函数:

 1 char ** createBuff(char **buff, int arrayLength, int charLength){
 2
 3     int i;
 4
 5     buff = (char **)malloc(sizeof(char *) * arrayLength); //给*buff分配空间,buff指向它的首地址
 6
 7     for (i = 0; i < arrayLength; ++i){
 8
 9         buff[i] = (char *)malloc(sizeof(char) * charLength); //*buff[i]分配空间,buff[i]指向它的首地址
10
11     }
12
13     return buff;
14 }
15
16 void initDemo(char **buff, int arrayLength){
17
18     int i;
19
20     for (i = 0; i < arrayLength; ++i){
21
22         sprintf(buff[i], "%d%d%d", i + 1 , i + 1, i + 1);
23
24     }
25 }
26
27 void destoryBuff(char **buff, int arrayLength){
28
29     int i;
30
31     for (i = 0; i < arrayLength; ++i){
32
33         if(buff[i] != NULL){
34
35             free(buff[i]);
36
37             buff[i] = NULL;
38
39         }
40
41     }
42
43     if(buff != NULL){
44
45         free(buff);
46
47         buff = NULL;
48
49     }
50 }
51
52
53
54 void printBuff(char ** buff, int arrayLength){
55
56     int i ;
57
58     for (i = 0; i < arrayLength; ++i){
59         printf("%s\n", buff[i]);
60     }
61 }
62
63 void sortBuffArray(char ** buff, int arrayLength){
64
65     int i, j;
66
67     char *temp = NULL;
68
69     for( i = 0; i < arrayLength; ++i){
70
71         for(j = i + 1; j < arrayLength; ++j){
72
73             if(strcmp(buff[j], buff[i]) > 0){
74
75                 temp = buff[i];
76
77                 buff[i] = buff[j];
78
79                 buff[j] = temp;
80
81             }
82
83         }
84
85     }
86
87 }

测试:

void main(){

    int arrayLength = 5, charLength = 100;

    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的地址即可。

时间: 2025-01-05 00:33:14

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

C语言之深入指针与字符串

<span style="font-family:KaiTi_GB2312;font-size:24px;">#include<stdio.h> #include<stdlib.h> //要使用malloc(),必须包含此库文件 void main() { char count, *ptr1, *p; ptr1 = malloc(27*sizeof(char)); ptr1[26] = 0;//字符串要加0 if (ptr1 == NULL) { p

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

pre{ line-height:1; color:#2f88e4; background-color:#e9ffff; font-size:16px;}.sysFunc{color:#3d7477;font-style:italic;font-weight:bold;} .selfFuc{color:#a0b684;} .bool{color:#86ddd8;} .condition{color:#94e269;font-weight:bold;} .key{color:#ae0bfd;} .

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

在做面试100题中第21题时,发现char *astr="abcdefghijk\0";和char astr[]={"abcdefghijk"};有点区别,以前一直以为是一样的,但是在该程序中采用字符串指针运行一直出错.后来在网上查查,果然发现大大的不同. 展示如何出错 分析:当你需要修改字符串时,采用指针指向该字符串编译通过但是运行出错,而采用字符串数组时不会出现这样的问题.我们知道计算机有堆栈空间供编程人员使用,第一行,astr为栈上分配的一个指针,而右边在堆上

c语言、二级指针

二级指针以及一级指针在使用上是一样的 一级指针 void func(int *x) { ? ? *x=2;//x是地址,*x是取地址是x的内容, } int main() { ? ? int a=0; ? ? func(&a);//传递时变量a的地址 ? ? return a: } 这里实现了函数内部对变量a的值的改变: 因为传递的是a的地址,然后改变其地址所映射的内存空间的值 二级指针 对于二级指针来说,不同的是传递的这个变量是地址,也即是指针型的变量 void func_1(int **x)

c语言之利用指针复制字符串的几种形式

第一种: #include<stdio.h> #include<iostream> void copy_string(char* p1, char* p2) { for (; *p1 != '\0'; *p1++,*p2++) { *p2 = *p1; } *p2 = '\0'; } int main() { char* str1 = (char*) "hello world"; char str2[] = "i am a student";

二级指针之锯齿数组

#include <stdio.h> #include <stdlib.h> #define N 10 void main() { int **pp = malloc(sizeof(int *)*(2 * N - 1)); for (int i = 0; i < N;i++) { pp[i] = malloc(sizeof(int )*(N - i));  for (int j = 0;j < N-i;j++) { pp[i][j] = j + 1; printf(&q

一级指针,二级指针,指向数组的指针

对"black,green,yellow,pin,red"几个单词排序 01 #include <iostream.h> #include <string.h> void sort(char (*p)[20],int n) { char *q; char b[20]; q=b; int i,j; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(strcmp(p[i],p[j])>0) { strcpy(q,

二级指针的简单运用

在C语言中,数组名就是一个指针常量,保存数组的首地址.因为数组名是一个常量指针常量,不能修改其指向的值,因此可以定义一个指针变量指向数组.这样使用数组名加下标可访问数组中的元素,使用指针名加下标也可访问数组中的元素.这些在本章前面已经介绍过了. 现在如果再定义一个二级指针变量,让其指向一级指针,就可使用二级指针变量操作数组.例如,使用以下语句定义二级指针变量: int a[10]; int *p=a; int **pp=&p; 这样,二级指针变量pp.一级指针变量p和数组a之间的关系,如图9-4

【学习ios之路:C语言】②高级指针应用

1.指针与字符数组 <span style="font-size:14px;"> /** 定义字符串的2种方式 * 1.利用数组 * char name[] = "itcast" * *特点:字符串里面的字符是可以修改的 * *使用场合:字符串的内容需要经常修改. * 2.利用指针 * char *name = "itcast"; * *特点:字符串其实是一个常量字符串,里面的字符是不能修改的; * *使用场合:字符串内容不需要修改,