• 指针第三种内存模型


      1 #define _CRT_SECURE_NO_WARNINGS
      2 #include<stdio.h>
      3 #include<stdlib.h>
      4 #include<string.h>
      5 
      6 //产生malloc
      7 char **getMem41(int num)
      8 {
      9     char **p2 = NULL;
     10     int i = 0;
     11     
     12     p2 = (char **)malloc(sizeof(char*)* num);
     13     if (p2 == NULL)
     14     {
     15         return NULL;
     16     }
     17     for (i = 0; i < num; i++)
     18     {
     19         p2[i] = (char *)malloc(sizeof(char)* 100);    //char buf[100];
     20         sprintf(p2[i], "%d%d%d", i + 1, i + 1, i + 1);    //按照这种格式("%d%d%d",i+1,i+1,i+1)打印到p2[i];
     21     }
     22     return p2;
     23 }
     24 
     25 //排序
     26 void sortNum31(char **array, int num)
     27 {
     28     char *tmp = NULL;
     29     int i = 0, j = 0;
     30     for (i = 0; i < num; i++)
     31     {
     32         for (j = i; j < num; j++)
     33         {
     34             if (strcmp(array[i], array[j])<0)
     35             {
     36                 tmp = array[i];    //注意:交换的数据的值,交换的是指针    //改变的是指针的指向
     37                 array[i] = array[j];
     38                 array[j] = tmp;
     39             }
     40         }
     41     }
     42 }
     43 
     44 //打印
     45 
     46 void printNum31(char **array, int num)
     47 {
     48     int i = 0;
     49     for (i = 0; i < num; i++)
     50     {
     51         printf("%s ", array[i]);
     52     }
     53 }
     54 
     55 void getMem41_Free(char **p,int num)
     56 {
     57     int i = 0;
     58     char **p2 = p;
     59     for (i = 0; i < num; i++)
     60     {
     61         if (p2[i] != NULL)
     62         {
     63             free(p2[i]);
     64             p2[i] = NULL;
     65         }
     66     }
     67     if (p2 != NULL)
     68     {
     69         free(p2);
     70         p2 = NULL;
     71     }
     72 }
     73 
     74 int main()
     75 {
     76     int i = 0;
     77     char **p2;
     78     int num = 5;
     79     char *tmp =NULL;
     80     char tmpBuf[100];
     81     
     82     p2 = getMem41(num);
     83 
     84     //排序之前打印
     85     printf("排序前:
    ");
     86     /*for (i = 0; i < num;i++)
     87     {
     88     printf("%s
    ",p2[i]);
     89     }*/
     90     printNum31(p2,num);
     91 
     92     
     93     //排序    //交换的是指针
     94     /*for (i = 0; i < num;i++)
     95     {
     96         for (int j = i + 1; j < num;j++)
     97         {
     98             if (strcmp(p2[i],p2[j])<0)
     99             {
    100                 tmp = p2[i];
    101                 p2[i] = p2[j];
    102                 p2[j] = tmp;
    103             }
    104         }
    105     }*/
    106     
    107 
    108     //排序    //交换的是内存
    109     /*for (i = 0; i < num; i++)
    110     {
    111         for (int j = i + 1; j < num; j++)
    112         {
    113             if (strcmp(p2[i], p2[j]) < 0)
    114             {
    115                 strcpy(tmpBuf, p2[i]);
    116                 strcpy(p2[i], p2[j]);
    117                 strcpy(p2[j], tmpBuf);
    118             }
    119         }
    120     }*/
    121 
    122     //排序
    123     sortNum31(p2, num);
    124     //排序后
    125     printf("
    排序后:
    ");
    126     /*for (i = 0; i < num; i++)
    127     {
    128         printf("%s
    ", p2[i]);
    129     }*/
    130     printNum31(p2, num);
    131     //释放内存
    132     getMem41_Free(p2, num);
    133     system("pause");
    134     return 0;
    135 }
  • 相关阅读:
    Unique path
    *Jump Game
    Valid Palindrome
    *Reverse Words in a String
    Min Stack
    [?]*Simplify Path
    *Valid Parentheses
    *Sqrt(x)
    String to Integer (atoi)
    Add Digits
  • 原文地址:https://www.cnblogs.com/linst/p/4867322.html
Copyright © 2020-2023  润新知