zoukankan      html  css  js  c++  java
  • C提高_day03_二级指针做输入第3种内存模型

    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    void main()
    {
        int i = 0, j = 0;
        char **p2 = NULL;
        int num = 5;
        char *tmp = NULL;
        char tmpbuf[100];   //交换内存,必须申请一块buf
        p2 = (char **)malloc(sizeof(char *) * num);
    
        for (i=0; i<num; i++)
        {
            p2[i] = (char *)malloc(sizeof(char)  * 100  ); //char buf[100];
            sprintf(p2[i], "%d%d%d", i+1, i+1, i+2);
        }
    
        //排序之前 
        printf("排序之前
    ");
        for (i=0; i<num; i++)
        {
            printf("%s 
    ", p2[i]);
        }
    
    
        //排序 交换的是 :指针
        /*
        for (i=0; i<num; i++)
        {
            for (j=i+1; j<num; j++)
            {
                if (strcmp( p2[i] , p2[j]) < 0)
                {
                    tmp = p2[i];
                    p2[i] = p2[j];
                    p2[j] = tmp;
                }
            }
        }
        */
    
        //排序 交换的时候内存         
        for (i=0; i<num; i++)
        {
            for (j=i+1; j<num; j++)
            {
                if (strcmp( p2[i] , p2[j]) < 0)            // strcmp(s1,s1),   s1=s2返回0;s1<s2返回负数;s1>s2返回正数
                {
                    strcpy(tmpbuf, p2[i]);
                    strcpy( p2[i], p2[j]);
                    strcpy( p2[j], tmpbuf);
                }
            }
     }
        
    
        //排序之前 
        printf("排序之后
    ");
        for (i=0; i<num; i++)
        {
            printf("%s 
    ", p2[i]);
        }
    
        //释放内存
        for(i=0; i<num; i++)  // 先释放一维的再释放molloc的
        {
            if (p2[i] != NULL)
            {
                free(p2[i]);
                p2[i] = NULL;
            }
        }
    
        if (p2!=NULL) 
        {
            free(p2);
        }
    
        printf("hello...
    ");
        system("pause");
        return ;
    }

    封装成函数:

    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    char **getMem41(int num)
    {
        int i = 0;
        char **p2 = NULL;
        p2 = (char **)malloc(sizeof(char *) * num);
        if (p2 == NULL)
        {
            return NULL;
        }
    
        for (i=0; i<num; i++)
        {
            p2[i] = (char *)malloc(sizeof(char)  * 100  ); //char buf[100];
            sprintf(p2[i], "%d%d%d", i+1, i+1, i+1);
        }
        return p2;
    }
    
    void printMyArray03(char **myArray, int num)   //第三种内存模型和第一种内存模型 p+1 是通用的
    {
        int i = 0;
        for (i=0; i<num; i++)
        {
            //printf("%s 
    ", myArray[i]);
            printf("%s 
    ", *(myArray+i) );
        }
    }
    
    void sortMyArray03(char **myArray, int num)
    {
        int i =0 , j = 0;
        char *tmp = NULL;
        //排序
        for (i=0; i<num; i++)
        {
            for (j=i; j<num; j++)
            {
                if (strcmp(myArray[i], myArray[j]) < 0)
                {
                    tmp = myArray[i];  //注意  交换的是数组元素 交换的是指针的值 //改变指针的指向
                    myArray[i] = myArray[j];
                    myArray[j] = tmp;
                }
            }
        }
    }
    
    void getMem41_Free(char **p2, int num)
    {
        int i = 0;
        //释放内存
        for(i=0; i<num; i++)
        {
            if (p2[i] != NULL)
            {
                free(p2[i]);
                p2[i] = NULL;
            }
        }
    
        if (p2!=NULL) 
        {
            free(p2);
        }
    
    }
    
    
    void main()
    {
        char **p2 = NULL;
        int  num = 5;
        
        p2 = getMem41(num);
    
        //排序之前 
        printf("排序之前
    ");
        printMyArray03(p2, num);
    
    
        sortMyArray03(p2, num);
        
    
        //排序之后 
        printf("排序之后
    ");
        printMyArray03(p2, num);
    
    
        getMem41_Free(p2,  num); //p2是一个野指针
        printf("hello...
    ");
    
        system("pause");
        return ;
    }

    03_第三种内存模型

    Stay hungry,Stay foolish
  • 相关阅读:
    如何修改Myeclipse的JSP模板
    解决----------“win10,不能打字了,已禁用IME”
    Scala学习之For、Function、Lazy(4)
    Scala学习之Tuple、Map、Array
    PHP Cookies
    PHP Cookies
    PHP 文件处理
    PHP include 和 require
    sqlserver2012 评估期已过问题处理
    PHP preg_match正则表达
  • 原文地址:https://www.cnblogs.com/zhesun/p/4972836.html
Copyright © 2011-2022 走看看