• C提高_day03_二级指针做输入第2种内存模型


    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    //打印  排序 
    //封装成函数
    void main()
    {
        int i = 0, j = 0;
        int num = 4;
        char tmpBuf[30];
        char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"};
    
        //打印 
        printf("排序之前
    ");
        for (i=0; i<num; i++)
        {
            printf("%s
    ", myArray[i]);
        }
    
        for (i=0; i<num; i++)
        {
            for (j=i+1; j<num; j++)
            {
                if (strcmp (myArray[i],  myArray[j]) > 0)
                {
                    strcpy(tmpBuf, myArray[i]);  //交换的是内存块
                    strcpy(myArray[i], myArray[j]);
                    strcpy(myArray[j], tmpBuf);
                }
            }
        }
    
        //打印 
        printf("排序之后
    ");
        for (i=0; i<num; i++)
        {
            printf("%s
    ", myArray[i]);
        }
    
    
        printf("hello...
    ");
        system("pause");
        return ;
    }

    封装后:

    #include <stdlib.h> 
    #include <string.h> 
    #include <stdio.h> 
    //问题的本质是:dm03_二级指针做输入_第2种内存模型 的 myArray + 1 和
        // dm03_二级指针做输入_第1种内存模型   myArray + 1 不一样 ;
    //指针的步长不一样  指针所指向的内存空间的数据类不一样 。。。。
    void printMyArray02_err(char **myArray, int num)
    {
        int i = 0;
        for (i=0; i<num; i++)
        {
            //printf("%s 
    ", myArray[i]);
            printf("%s 
    ", *(myArray+i) );  //
        }
    }
    
    void printMyArray02(char myArray[10][30], int num)
    {
        int i = 0;
        for (i=0; i<num; i++)
        {
            //printf("%s 
    ", myArray[i]);
            printf("%s 
    ", *(myArray+i) );  //
        }
    }
    
    
    
    //交换的是内存块。。。。。。。。
    void sortMyArray02(char myArray[10][30], int num)
    {
        int i, j = 0;
        char tmpBuf[30];
    
        for (i=0; i<num; i++)
        {
            for (j=i+1; j<num; j++)
            {
                if (strcmp (myArray[i],  myArray[j]) > 0)
                {
                    strcpy(tmpBuf, myArray[i]);  //交换的是内存块
                    strcpy(myArray[i], myArray[j]);
                    strcpy(myArray[j], tmpBuf);
                }
            }
        }
    
    }
    
    //打印  排序 
    //封装成函数
    void main()
    {
        int i = 0, j = 0;
        int num = 4;
        char myBuf[30];
        char tmpBuf[30];
        char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"};
    
        //myArray: 编译器只会关心:有10行 ,每行30列。。。。。干什么?myArray+1  多维数组名的本质,myArray+1会往后面跳30个单元
        {
            int len1 = sizeof(myArray);
            int len2 = sizeof(myArray[0]);
            int size = len1/len2;
            printf("len1:%d , len2:%d  size:%d 
    ", len1, len2, size);
    
        }
        
    
        //打印 
        printf("排序之前
    ");
    
        printMyArray02(myArray, num);
        
    
        sortMyArray02(myArray, num);
    
        //打印 
        printf("排序之后
    ");
        printMyArray02(myArray, num);
    
        printf("hello...
    ");
        system("pause");
        return ;
    }

    第一种模型改变指针的指向,第二种模型直接交换内存块。

    Stay hungry,Stay foolish
  • 相关阅读:
    Go 环境变量相关操作
    Go命令行参数解析flag包
    go sync.once用法
    使用go语言编写IOS和Android程序
    go map的使用
    go runtime.Gosched()的作用分析
    go中的读写锁RWMutex
    go互斥锁Mutex
    go import使用及. _的作用解析
    利用channel在goroutins之间控制同步和传递数据
  • 原文地址:https://www.cnblogs.com/zhesun/p/4962969.html
Copyright © 2020-2023  润新知