C语言 指针数组的使用
指针数组一般可以指向多个字符串,对字符串的操作将更灵活。
【例题】姓名升序输出
输入若干个人的姓名,请将这些人的名字按字母顺序升序输出。
算法分析:
将这些人的姓名字符串的首地址赋给一个字符指针数组的各个元素,如图所示。这些姓名字符串是常量字符串,常量字符串不可以使用字符串复制函数strcpyO来互相复制,因此可以考虑改变name[]数组中各个元素的指向。也就是说将name[0]指针指向最小的字符串,name[4]指针指向最大的字符串,那么在排序算法中,只需让指针之间相互交换即可。
name[0] | —► | Z | h | a | n | g | s | d | n | \0 | |
name[1] | —► | L | i | 5 | i | \0 | |||||
name[2] | —► | W | a | n | 9 | w | u | \0 | |||
name[3] | —► | Z | h | d | 0 | l | i | u | \0 | ||
name[4] | —► | H | a | n | q | i | \0 |
程序代码如下:
#include <stdio.h>
void sort(char *name[], int count) /* 对字符指针数组进行了排序 */
{
char *t;
int i,j,min;
for(i=0; i<count-l; i++) /* 冒泡法排序 */
for(j=O; j<count-l-i; j++)
if(strcmp(name[j],name[j+1])>0)
{
t=name[j];
name[j]=name[j+1];
name[j+1]=t;
}
}
main()
{
char *name[5]={"Zhangsan","LIsi","Wangwu","Zhaoliu","Hanqi"}
int i=0;
sort(name,5); /*使用字符指针数组名作实参,调用排序函数sort()*/
for(; i<5; i++)
printf("%s\n",name[i]);
}
程序执行,输出结果为:
Hanqi
Lisi
Wangwu
Zhangsan
Zhaoliu
点击加载更多评论>>