困扰了很久的问题,求指教……
有个问题,一直在困扰我,不说废话,切入正题:其实这个代码不用细看,我只是在练习指针数组的使用,但是发现一个问题,
那就是我必须把所有要用到的变量先全部定义出来才能编译通过,否则就报错,如下:
正确代码:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[20],str2[20],str3[20],str4[20],str5[20];
char *p[5];
int i,j;
char *temp;
printf("请输入第一个字符串(限20个字符)\n");
gets(str1);
printf("请输入第二个字符串(限20个字符)\n");
gets(str2);
printf("请输入第三个字符串(限20个字符)\n");
gets(str3);
printf("请输入第四个字符串(限20个字符)\n");
gets(str4);
printf("请输入第五个字符串(限20个字符)\n");
gets(str5);
p[0]=str1;
p[1]=str2;
p[2]=str3;
p[3]=str4;
p[4]=str5;
for(i=4;i>=0;i--)
{
for(j=0;j<i;j++)
{
if(strcmp(p[j],p[j+1])<0)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
printf("将输入的字符串从大到小排列为:\n");
for(i=0;i<5;i++)
{
printf("%s\n",p[i]);
}
return(0);
}
这个能够正确运行,但是下面的就不能,请注意红色的部分,我不过是把变量定义的位置放在了后面,
书上不是说变量定义的位置之后也属于这个变量的作用范围,但是为什么就报错呢?:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[20],str2[20],str3[20],str4[20],str5[20];
printf("请输入第一个字符串(限20个字符)\n");
gets(str1);
printf("请输入第二个字符串(限20个字符)\n");
gets(str2);
printf("请输入第三个字符串(限20个字符)\n");
gets(str3);
printf("请输入第四个字符串(限20个字符)\n");
gets(str4);
printf("请输入第五个字符串(限20个字符)\n");
gets(str5);
char *p[5];
p[0]=str1;
p[1]=str2;
p[2]=str3;
p[3]=str4;
p[4]=str5;
int i,j;
char *temp;
for(i=4;i>=0;i--)
{
for(j=0;j<i;j++)
{
if(strcmp(p[j],p[j+1])<0)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
printf("将输入的字符串从大到小排列为:\n");
for(i=0;i<5;i++)
{
printf("%s\n",p[i]);
}
return(0);
}
求指教,不胜感激……