zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    使用golang访问kubebernetes
    使用 Rancher 管理现有 Kubernetes 集群
    Running powershell scripts during nuget package installation and removal
    How to Create, Use, and Debug .NET application Crash Dumps in 2019
    寻找写代码感觉(一)之使用 Spring Boot 快速搭建项目
    Selenium+Java之解决org.openqa.selenium.InvalidArgumentException: invalid argument报错问题
    Selenium环境搭建
    关于Xpath定位方法知道这些基本够用
    Web自动化之浏览器启动
    【翻译】编写代码注释的最佳实践
  • 原文地址:https://www.cnblogs.com/zhesun/p/4962969.html
Copyright © 2011-2022 走看看