有个C语言题目

来源:百度知道 编辑:UC知道 时间:2024/05/21 23:57:23
有个C语言题目

题目是这样的:输入N个字符窜,用指向指针的指针的办法按从大到小排列后输出。
小弟是这样写的:
#include<stdio.h>
main()
{
char s[10],*p,**pp;
int i,k,j,*temp;
printf("Please iuput chars:");
gets(s);
p=s;
pp=&p;
for(i=0;i<10-1;j++)
{
k=i;
for(j=i+1;j<10;j++)
if(**(pp+k)>**(pp+j))k=j;
if(k!=i)
{
temp=**(pp+i);(警告 4k43.c 17: 不可移动的指针(地址常数)赋值在 main 函数中)
**(pp+i)=**(pp+k);
**(pp+k)=temp;
}
}
printf("The chars are:");
for(i=0;i<10;i++)
printf("The quared chas are:%s",**(pp+i));
printf("\n");
getch();
}
请问为什么会出现那么的警告?
高人指点下,谢谢

1.
temp=**(pp+i);
根据前面你的定义,
此时temp是一个指针型变量.
而**(pp+i)则是指向的一个字符.
2.
**(pp+i)=**(pp+k);
指针的赋值格式也是不正确的.
ps.
如果我说的不对请给我短消息.
我也是学习中.

#include<stdio.h>
main()
{
char s[10],*p,**pp,temp;
int i,j;
printf("Please iuput chars:");
gets(s);
p=s;
pp=&p;

for(i=0;i<9;i++)
{
for(j=i;j<=9;j++)
if(*(*pp+i)<*(*pp+j))
{
temp=*(*pp+i);
*(*pp+i)=*(*pp+j);
*(*pp+j)=temp;
}
}

printf("The chars are:");
for(i=0;i<10;i++)
printf("%c",*(*pp+i));
printf("\n");
getch();
}
程序已经调试过,没有问题。
输入:abcdefghij
输出:jihgfedcba