程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 內存-程序問題,請幫忙修改,感謝

內存-程序問題,請幫忙修改,感謝

編輯:編程綜合問答
程序問題,請幫忙修改,感謝
#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,則第一個字符串有很多空值,造成浪費,那字符數組
則是在第一個字符串之後馬上存儲第二個字符串,它們應存儲在連續的內存空間,才節省內存
但事實相反,用字符串指針在內存中也有很多空值,如下圖所示,求解惑內存

最佳回答:


#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;
        }

    }

}
u011475211
u011475211
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved