C语言中定义一个指向字符的指针数组char *s[5], 则*s[1],s[1],*(s+1),s+1各代表什么意思?请看下面的程序

/*用指针数组处理,字符串长度不等长:
在主函数中输入10个的字符串,用另一个函数
对它们排序,然后在主函数输出这10个已排好序的字符串
*/
#include <stdio.h>
#include <string.h>
int main()
{
void sort(char *[]);
int i;
char *p[10],str[10][20];
for (i=0;i<10;i++)
p[i]=str[i];
printf("input 10 strings:\n");
for (i=0;i<10;i++)
scanf("%s",p[i]);
sort(p);
printf("Now,the sequence is:\n");
for (i=0;i<10;i++)
printf("%s\n",p[i]);
return 0;
}

void sort(char *s[])
{
int i,j;
char *temp;
for( i=0;i<10;i++ )
for( j=i+1;j<10;j++ )
if( strcmp( s[i],s[j] ) > 0 )
{
temp = s[i];
s[i] = s[j];
s[j] = temp;

/* temp = *(s+i); // 这三句与上三句运行结果一样,是可以的
* (s+i) = *(s+j);
* (s+j) = temp; */

/* temp = * s[i]; //这三句不能得到预期结果,但我最开始就是这样写的
* s[i] = * s[j]; //由此我就想弄明白*s[1],s[1],*(s+1),s+1这四个
* s[j] = temp; //各表示什么,但我想不清,请指教 */
}
}

void sort(char *s[]) 这里接收到的是指针数组,即:数组中各元素 是指针地址,s是数组首地址

s[i]表示第i+1个元素 的值(地址,一个字符串的首地址,* s[i] 表示这个字符串的第一个元素,是个字符)
s+i是第i+1个元素的地址,*(s+i)是地址中的数据,等同于s[i]追问

恩恩,谢谢你 的回答
但我还是有些不明白,再请你给我指教一下,
既然 s[i] 表示第i+1个元素 的值(是一个地址,一个字符串的首地址)
而strcmp函数中,拿出来比较的应该是两个字符串中的每一个字符啊?那为什么程序中是这样的 strcmp( s[i],s[j] ) > 0 ),这样的话,那比较的不就是地址在进行比较吗,这个又怎么理解呢?

追答

int strcmp( char *, char *) ; 这是函数原型
根据传入的两个形参的值 :地址,对两个字符串进行比较!!!这怎么是比较两个地址呢?仔细看看,慢慢想想

温馨提示:答案为网友推荐,仅供参考
相似回答