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