二级指针的三种内存模型

一、二级指针的第一种内存模型

《1》内存模型图:
图一
《2》程序实现:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int Printarr(char** arraystr,int Numi)
{
    int i=0;
    for(i=0;i<Numi;i++)
    {
        printf("array为:%s\n",arraystr[i]);
    }
    return 0;
}

int SortArr(char**arraystr,int Numi)
{
    int ret=0;
    int i,j;
    char*tmp=NULL;
    if(arraystr==NULL)
    {
        ret=-1;
        return ret;
    }
    for(i=0;i<Numi;i++)//选择排序法
    {
        for(j=i+1;j<Numi;j++)
        {
            if(strcmp(arraystr[i],arraystr[j])>0)//比较,若前面比后面大,交换
            {
                tmp=arraystr[i];
                arraystr[i]=arraystr[j];
                arraystr[j]=tmp;
        }
    }
}
return ret;
}

void main()
{
    int i,j=0;
    char*tmp=NULL;
    char* array[]={"bbbbb","aaaa","cccc","1111","zzzzz"};//指针数组

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

    SortArr(array, 5);//排序

    printf("排序之后:\n");
    Printarr(array);

    system("pause");

}

《3》运行结果:

图一

二、二级指针的第二种内存模型

《1》内存模型图:

《2》程序实现:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int Printarr01(char arraystr2[10][30],int numi )
{
    int i=0;
    for(i=0;i<numi;i++)
    {
        printf("array1为:%s\n",arraystr2[i]);
    }
    return 0;
}

int SortArr2(char arraystr[10][30],int Numi)
{
    int ret=0;
    int i,j;
    char tmp[30];//*****************重点************************8
    if(arraystr==NULL)
    {
        ret=-1;
        return ret;
    }
    for(i=0;i<Numi;i++)//选择排序法
    {
        for(j=i+1;j<Numi;j++)
        {
            if(strcmp(arraystr[i],arraystr[j])>0)//比较,若前面比后面大,交换
            {
                strcpy(tmp,arraystr[i]);
                strcpy(arraystr[i],arraystr[j]);
                strcpy(arraystr[j],tmp);
        }
    }
}
return ret;
}

void main()
{
    char array1[10][30]={"bbbbb","aaaa","cccc","1111","zzzzz"};
    int i=0;
    printf("排序之前:\n");
    Printarr01( array1,5);

    SortArr2(array1,5);
    printf("排序之后:\n");
    Printarr01( array1,5);

    system("pause");
}

《3》运行结果:

三、二级指针的第三种内存模型

《1》内存模型图:
(1)手动开辟内存空间,
(2)注意避免内存泄露问题
(3)先开辟的空间后释放,后开辟的先销毁,
(4)类似于模型一

《2》程序实现:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int Printarr(char** arraystr,int Numi)
{
    int i=0;
    for(i=0;i<Numi;i++)
    {
        printf("array为:%s\n",arraystr[i]);
    }
    return 0;
}

int SortArr(char**arraystr,int Numi)
{
    int ret=0;
    int i,j;
    char*tmp=NULL;
    if(arraystr==NULL)
    {
        ret=-1;
        return ret;
    }
    for(i=0;i<Numi;i++)//选择排序法
    {
        for(j=i+1;j<Numi;j++)
        {
            if(strcmp(arraystr[i],arraystr[j])<0)//比较,若前面比后面大,交换
            {
                tmp=arraystr[i];
                arraystr[i]=arraystr[j];
                arraystr[j]=tmp;
        }
    }
}
return ret;
}

void main()
{
    int i=0;
    char** myarray=(char**)malloc(10*sizeof(char*));
    if(myarray==NULL)
    {
        return;
    }

    for(i=0;i<10;i++)
    {
        myarray[i]=(char*)malloc(100*sizeof(char));
        if (myarray[i]  == NULL)
        {
            return;
        }

        sprintf(myarray[i],"%d%d%d ", i, i, i);//将i,i,i打印到myarray[i]中
    }
    printf("排序之前:\n");
    Printarr(myarray,10);

    SortArr(myarray,10);

    printf("排序之后:\n");
    Printarr(myarray,10);
    for(i=0;i<10;i++)
    {
        free(myarray[i]);
    }

    if(myarray!=NULL)
    {
        free(myarray);
    }

    system("pause");
}

《3》运行结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值