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; //各表示什么,但我想不清,请指教 */
}
} 展开
在主函数中输入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; //各表示什么,但我想不清,请指教 */
}
} 展开
展开全部
追问
恩恩,谢谢你 的回答
但我还是有些不明白,再请你给我指教一下,
既然 s[i] 表示第i+1个元素 的值(是一个地址,一个字符串的首地址)
而strcmp函数中,拿出来比较的应该是两个字符串中的每一个字符啊?那为什么程序中是这样的 strcmp( s[i],s[j] ) > 0 ),这样的话,那比较的不就是地址在进行比较吗,这个又怎么理解呢?
追答
int strcmp( char *, char *) ; 这是函数原型
根据传入的两个形参的值 :地址,对两个字符串进行比较!!!这怎么是比较两个地址呢?仔细看看,慢慢想想
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询