本帖最后由 18813974736 于 2016-8-29 13:58 编辑 #include <stdio.h>
#include <string.h>
//两个函数的声明
void paixu(char *a[],int n);
void shuchu(char *a[],int n);
void main()
{
//定义一个指针数组并初始化
char *b[]={"whit s fox","i am a boy","you are","i am a cat","you are a girl"};
//首先指针数组是一个数组,它的每一个元素都是一个指针(即地址);
//也就是说我们初始化指针数组的时候其实传给它每个元素的是字符串的首地址;
//字符串是存储在文字常量区(内存的data段),它的生命周期跟程序一样(即程序结束它才释放);
int x=5;
paixu(b,x);//b是数组名,代表数组首元素地址
shuchu(b,x);//b是数组名,代表数组首元素地址
}
void paixu(char *a[],int n)//这里的指针变量a存储的是指针数组b的首元素地址
{
char *t;
int i,j;
for(i=0;i<n-1;i++)
{ for(j=i+1;j<n;j++)
{
if(strcmp(a[i],a[j])//比较两个字符串的ASCII大小(即比较相同编号的字符的ASCII的大小)
{ //如 whit s fox 和 i am a boy(先 w 和 i 比较ASCII码的大小,只要不是等于就不会再往下比较)
//楼主可以自己查看下 strcmp 函数;传的是字符串首地址,
//比较的却是这个地址所指向的内存里存储的字符串
t=a[i]; //交换的是地址(因为指针数组里每个元素存储的都是指针(即地址))
a[i]=a[j];
a[j]=t;
}
}
}
}
void shuchu(char *a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",a[i]);
}
|