C语言指针与数组的题

#include<stdio.h>
#define n 3,m 5
void main()
{
int i,j,k;
char *str;
scanf("%s",str);
for(i=n,j=n+m-1;i<m+n,j>(m+n)/2;i++,j--)
{
k=*(str+i);
*(str+i)=*(str+j);
*(str+j)=k;
}
printf("%s\n",str);
}

程序要求是从第n个字符开始,连续5个字符倒序排列,编译出来有很多错误...请问错在哪里了?

第1个回答  2012-12-09
#include<stdio.h>
#define n 3
#define m 5
void main()
{ int i=0,j=0,k;
char *str;
scanf("%s",str);
j=n+m-2;
for(i=n-1;i<n-1+m/2;i++) //第n个 字符开始,数组、指针第一个地址是从0开始,所以要n-1
{
k=*(str+i);
*(str+i)=*(str+j);
*(str+j)=k;
j--;
}
printf("%s\n",str);
}来自:求助得到的回答
第1个回答  2012-12-09
#include<stdio.h>
//#define n 3,m 5
#define n 3
#define m 5
void main()
{
int i,j,k;
char str[50]; //*str
scanf("%s",str);
for(i=n,j=n+m-1;i<j;i++,j--) //i<m+n,j>(m+n)/2
{
k=*(str+i);
*(str+i)=*(str+j);
*(str+j)=k;
}
printf("%s\n",str);
}追问

请问一下,为什么没有指针还可以用*进行指针交换?

追答

数组名代表数组首元素的地址,也就是就相当于指针。

本回答被提问者采纳
第2个回答  2012-12-09
看着比较复杂,字符串倒叙我给你个
#include<stdio.h>
void pp(char *p)
{
if(*p)
{
pp(p+1);
putchar(*p);
}
}
main( )
{
char k[20];
gets(k);
pp(k);
}
第3个回答  2012-12-09
scanf("%s",str);这里少了&
相似回答