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("排序之前\n");
    for (i=0; i<num; i++)
    {
        printf("%s\n", 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("排序之后\n");
    for (i=0; i<num; i++)
    {
        printf("%s\n", myArray[i]);
    }

    printf("hello...\n");
    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 \n", myArray[i]);
        printf("%s \n", *(myArray+i) );  //
    }
}

void printMyArray02(char myArray[10][30], int num)
{
    int i = 0;
    for (i=0; i<num; i++)
    {
        //printf("%s \n", myArray[i]);
        printf("%s \n", *(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 \n", len1, len2, size);

    }

    //打印
    printf("排序之前\n");

    printMyArray02(myArray, num);

    sortMyArray02(myArray, num);

    //打印
    printf("排序之后\n");
    printMyArray02(myArray, num);

    printf("hello...\n");
    system("pause");
    return ;
}

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

时间: 2024-12-15 18:20:39

C提高_day03_二级指针做输入第2种内存模型的相关文章

二级指针做输入的第一种模型

1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 void printNum(char **array, int num) 7 { 8 int i = 0; 9 for (i = 0; i < num; i++) 10 { 11 printf("%s ", array[i]); 12 } 13 }

C提高_day03_二级指针内存示意图(没有比这重要的了)

//指针数组 char  *pszBuf[] = {"123", "456", "789"}; //二维数组 char *psz[3][4]  = {"123", "456", "789"};   //手工二维内存 char **p3 = (char **)malloc(3 * sizeof(char *));        //这句相当于int array[3];    //p3就分配

二级指针做输入的第三种内存模型:手工打造二维内存

声明局部变量p, p指向一段内存地址,这段内存地址存放这N个指针,每个指针都指向malloc的另一段内存. 内存模型图如下: p应该是二级指针 #define _CRT_SECURE_NO_WARNINGS#include<stdlib.h>#include<stdio.h>#include<string.h>#include<ctype.h> char**getMem(int num){ int i = 0, j = 0; char** p2 = NULL

二级指针做函数的输入与输出

本文将介绍二级指针做函数输出以及做函数输入的三种内存模型从内存四区的角度对程序执行的过程进行剖析,通过这中方式来加深对指针的理解. 二级指针做输出(在被调函数中分配内存)模型: 主函数: int main() { char *p = NULL; int len = 0; getMem(&p, &len); printf("p=%s\n", p); FreeMem(&p); return 0; } getMem函数: int getMem(char **myp,i

二级指针的3种内存模型

二级指针的内存模型 二级指针的第一种内存模型 Char*Accary [ ] ={ "aaaaaa", "bbbbbb", "ccccccc" }; //接口形参使用方式 Intprintfarr(char **ArrayStr,int iNUm) { For(i =0; i<iNUm; i++) { Printf("%s \n", ArrayStr[i]); } } //调用方式 Printfarr(Accary, 3

二级指针的三种内存模型

第一种内存模型: /* Module: 二级指针第一种内存模型.cpp Notices: Copyright (c) 2017 Landy Tan */ #include <iostream> using namespace std; ///////////////////////////////////////////////// #define SIZE(a) sizeof(a) / sizeof(a[0]) int SortArray(char **pArray, int nLen);

C++二级指针第二种内存模型(二维数组)

C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4],b[5][10]; 二维数组元素地址 #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; int a[3][4]={ {1,2,3

C提高_day03_一级指针易犯错误模型

1.char *(字符串)做函数参数出错模型分析 建立一个思想:是主调函数分配内存,还是被调用函数分配内存: //不要相信,主调函数给你传的内存空间,你可以写......一级指针你懂了. 但是二级指针,你就不一定懂...抛出......... void copy_str21(char *from, char *to) { if (*NULL = '\0' || *to!='\0') { Printf("func copy_str21() err\n"); return; } for (

二级指针三种内存模型综合训练

/*** point_practice.c ***/ #include<stdio.h> #include<string.h> #include<stdlib.h> int sort( char **myp1 /*in*/, int num1, char (*myp2)[30], int num2, char ***myp3, int *num3) { int i = 0, j = 0, k = 0; int tmplen; char **p3 = NULL; char