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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM