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

/*用指针数组处理,字符串长度不等长:在主函数中输入10个的字符串,用另一个函数对它们排序,然后在主函数输出这10个已排好序的字符串*/#include<stdio.h>... /*用指针数组处理,字符串长度不等长:
在主函数中输入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; //各表示什么,但我想不清,请指教 */
}
}
展开
 我来答
kaixingui2012
推荐于2016-02-12 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6381万
展开全部
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 *)  ;  这是函数原型
根据传入的两个形参的值 :地址,对两个字符串进行比较!!!这怎么是比较两个地址呢?仔细看看,慢慢想想
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式