#includeint cmp(char *p1,char *p2) /* 字符串比较函数*/
{
int i=0;
while (*(p1+i)==*(p2+i))
if (*(p1+i++)==\0) return 0; /* 这里是先判断*(p1+i)==\0,然后再是i++ */
return (*(p1+i)-*(p2+i));
}
void sort(char *a[3]) /*排序函数*/
{
char *temp;
int i,j;
for(i=0;i<3-1;i++)/* 选择排序*/
for(j=i+1;j<3;j++)
if(cmp(a[i],a[j])>0)
{temp=a[i];
a[i]=a[j];
a[j]=temp;}
}
void main()
{
int i;
char s[3][81],*p[3];/* 设定每个字符串不超过字节*/
printf("请输入3个字符串:\n");
for(i=0;i<3;i++)
{
gets(s[i]);
p[i]=s[i];
}
sort(p);
printf("字符串从小到大排序为:\n");
for(i=0;i<3;i++)
printf("%s\n",p[i]);
}
五、 思考题或实验感想
小结函数指针、数组指针、字符串指针的使用。
对于指针的使用,最重要的是搞清楚函数指针、数组指针和字符串指针的概念,不能混乱起来。
函数指针变量指向一个函数,然后通过该指针变量调用此函数。函数指针中,函数名代表该函数的入口地址。函数指针只能指向函数的入口而不能指向函数中的某一条指令处,因此不能用*(p+1)表示函数的下一条指令。
数组元素的指针就是数组元素的地址。C语言中规定数组名代表数组中首元素的地址,所以p=&a[0]和p=a等价。p+i,a+i就是a[i]的地址,或者指向数组的第i个元素。*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。指向数组的指针变量可以带有下标,如p[i]与*(p+i)等价。
字符串指针实际上是把字符串的第一个字符赋给指针变量。指针变量只能指向一个字符变量或其他字符型数据,不能同时指向多个字符数据。