二级指针做输入的三种内存模型(三)

第三中内存模型的图示如下:

首先需要一个指针指向一个数组,该数组的元素为指针,数组内的指针指向字符串。

#include<stdio.h>
int main()
{
    char **p;
    int num=3,i;
    p=(char **)malloc(sizeof(char*));
    for(i=0;i<num;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100);
    }
    strcpy(p[0],"111");
    strcpy(p[1],"333");
    strcpy(p[2],"222");
}

这样呢,p[0]、p[1]和p[2],就分别指向了上面三个字符串。

接下来我们就行字符串的打印,如下:

#include<stdio.h>
int main()
{
    char **p;
    int num=3,i;
    p=(char **)malloc(sizeof(char*);
    for(i=0;i<num;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100));
    }
    strcpy(p[0],"111");
    strcpy(p[1],"333");
    strcpy(p[2],"222");
    for(i=0;i<num;i++)
        printf("%s\n",p[i]);
 }

这样呢,我们就完成了字符串的打印。当我们不需要那些动态分配的内存时,是不是需要释放呢?释放代码如下:

#include<stdio.h>
int main()
{
    char **p;
    int num=3,i;
    p=(char **)malloc(sizeof(char*);
    for(i=0;i<num;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100));
    }
    strcpy(p[0],"111");
    strcpy(p[1],"333");
    strcpy(p[2],"222");
    for(i=0;i<num;i++)
        printf("%s\n",p[i]);
    for(i=0;i<num;i++)
    {
        if(p[i]!=NULL)
            free(p[i]);
    }
    if(p!=NULL)
        free(p);
 }

释放的方法是谁是最后分配的就先释放谁,是不是和栈类似呢?

接下来进行排序,排序方法有两种,一种交换指针,另一种交换内存空间。交换指针代码如下:

#include<stdio.h>
int main()
{
    char **p;
    char *temp;
    int num=3,i,j;
    p=(char **)malloc(sizeof(char*);
    for(i=0;i<num;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100));
    }
    strcpy(p[0],"111");
    strcpy(p[1],"333");
    strcpy(p[2],"222");
    for(i=0;i<num;i++)
     {
        for(j=i+1;j<num;j++)
        {
            if(strcmp(p[i],p[j])>0)
            {
                temp=p[i];
                p[i]=p[j];
                p[j]=temp;
            }
        }
    }
}                

这样我们就完成了通过交换指针实现对字符串的排序,接下来进行交换内存空间:

#include<stdio.h>
int main()
{
    char **p;
    char temp[100];
    int num=3,i,j;
    p=(char **)malloc(sizeof(char*);
    for(i=0;i<num;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100));
    }
    strcpy(p[0],"111");
    strcpy(p[1],"333");
    strcpy(p[2],"222");
    for(i=0;i<num;i++)
    {
        for(j=i+1;j<num;j++)
        {
            if(strcmp(p[i],p[j])>0)
            {
                strcpy(temp,p[i]);
                strcpy(p[i],p[j]);
                strcpy(p[j],temp);
             }
        }
    }
}                

上面我们通过交换内存空间实现字符串的排序。

接下来进行自定义函数打印,代码如下:

扫描二维码关注公众号,回复: 1615519 查看本文章
#include<stdio.h>
void print(char **p,int num)
{
	int i;
	for(i=0;i<num;i++)
        printf("%s\n",p[i]);
}
int main()
{
    char **p;
    int num=3,i;
    p=(char **)malloc(sizeof(char*));
    for(i=0;i<num;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100);
    }
    strcpy(p[0],"111");
    strcpy(p[1],"333");
    strcpy(p[2],"222");
    print(p,num);
}

接下来进行自定义函数第一种排序:

#include<stdio.h>
void sort(char **p,int num)
{
    char *temp;
    int  i,j;
    for(i=0;i<num;i++)
     {
        for(j=i+1;j<num;j++)
        {
            if(strcmp(p[i],p[j])>0)
            {
                temp=p[i];
                p[i]=p[j];
                p[j]=temp;
            }
        }
    }
}                
int main()
{
    char **p;
    int num=3,i;
    p=(char **)malloc(sizeof(char*));
    for(i=0;i<num;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100);
    }
    strcpy(p[0],"111");
    strcpy(p[1],"333");
    strcpy(p[2],"222");
    sort(p,num);
}

接下来进行第二种排序:

#include<stdio.h>
void sort(char **p,int num)
{
    char temp[100];
    int  i,j;
    for(i=0;i<num;i++)
     {
        for(j=i+1;j<num;j++)
        {
            if(strcmp(p[i],p[j])>0)
            {
                strcpy(temp,p[i]);
                strcpy(p[i],p[j]);
                strcpy(p[j],temp);
            }
        }
    }
}                
int main()
{
    char **p;
    int num=3,i;
    p=(char **)malloc(sizeof(char*));
    for(i=0;i<num;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100);
    }
    strcpy(p[0],"111");
    strcpy(p[1],"333");
    strcpy(p[2],"222");
    sort(p,num);
}
二级指针做输入的三种内存模型至此结束,如有错误,欢迎批评指出。

猜你喜欢

转载自blog.csdn.net/wang_zhao_/article/details/80713273
今日推荐