caoxwei2 2015-01-06 08:45 采纳率: 100%
浏览 2502
已采纳

程序问题,请帮忙修改,感谢

#include<stdio.h>
#include<string.h>
int main()
{
    void sort(char * name[],int n);
    char * name[]={"Follow me","Basic","Great Wall","FORTRAN","Computer Design"};
    int i,n=5;
    sort(name,n);
    for(i=0;i<n;i++)
        printf("%s\n",name[i]);
    return 0;
}

void sort(char * name[],int n)
{
    int i,j,k;
    char *temp;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(strcmp(name[k],name[j])>0)
                k=j;
        if(i!=k)
        {
            temp=name[i];
            name[i]=name[k];
            name[k]=temp;
        }

    }

}

书上说,不用字符串数组而用字符串指针的原因是字符串长度不一,使用 数组必须制定
长度会造成内存浪费.比如有的字符串的长度次是6,8,20,22,25. 我对它的理解是那如果
用字符串数组就必须指定列长度为25,则第一个字符串有很多空值,造成浪费,那字符数组
则是在第一个字符串之后马上存储第二个字符串,它们应存储在连续的内存空间,才节省内存
但事实相反,用字符串指针在内存中也有很多空值,如下图所示,求解惑内存

  • 写回答

9条回答 默认 最新

  • threenewbee 2015-01-06 10:03
    关注
    #include<string.h>
    
    void sort(char *p[5]);
    
    int main()
    {
        char ** str = (char **)malloc(20);
        str[0] = (char *)&"Follow me";
        str[1] = (char *)&"Basic";
        str[2] = (char *)&"Great Wall";
        str[3] = (char *)&"FORTRAN";
        str[4] = (char *)&"Computer Design";
        sort(str);
        for (int i = 0; i < 5; i++)
        {
            printf("%s\n", str[i]);
        }
    }
    
    void sort(char *p[5])
    {
        int i,j,k;
        char * temp = 0;
        for(i=0;i<5;i++)
        {
            k=i;
            for(j=i+1;j<5;j++)
                if(strcmp(p[i],p[j])>0)
                    k=j;
            if(i!=k)
            {
                temp = p[i];
                p[i] = p[k];
                p[k] = temp;
            }
    
        }
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器