求解释一下图示里p指针的含义,指向的是什么。以及定义函数中*(p+i)的意思。定义函数是如何用冒泡法对5个字符串排序的。
p指向一个字符串数组,或者说是二维字符数组
*p表示字符串数组的首地址的值,也就是第一个字符串
*(p + i)就表示第i+1个字符串
p指向数组中的字符串,也就是多个元素
*(p+i)相当于p[][i]
冒泡排序中用的scrtmp函数比较字符串,然后排序
下面是我的理解,不一定正确,供你参考,如下:
#include <stdio.h>
#include <string.h>
#define LINEMAX 20
int main(){
void sort(char **p);
int i;
char **p,*pstr[5],str[5][LINEMAX];
for(i=0;i<5;i++){
pstr[i] = str[i]; //把指针数组依次赋值为二维数组str的行指针
}
printf("input 5 strings:\n");
for(i=0;i<5;i++){
scanf("%s",pstr[i]); //存放在这五个地址存放一个字符串
}
p = pstr; //p赋值为指向这个指针数组
sort(p);
printf("\nstrings sorted:\n");
for(i=0;i<5;i++){
printf("%s\n",pstr[i]);
}
return 0;
}
void sort (char **p){
int i,j;
char * temp;
for(i=0;i<5;i++){
for(j=i+1;j<5;j++){
// printf("before change :*(p+i)=%s,*(p+j)=%s\n",*(p+i),*(p+j));
//p+i为下标为i的指针数组的指针,*(p+i)为取下标为i的指针指向的字符串
//p+j为下标为j的指针数组的指针,*(p+j)为取下标为j的指针指向的字符串
//比较这两个指针指向的字符串 ,然后交换他们的值-指针值,把他们存放字符串的地址值交换
//达到排序字符串的目的
if(strcmp(*(p+i),*(p+j))>0){
temp=*(p+i);
*(p+i) = *(p+j);
*(p+j) = temp;
}
}
}
}