C高手指点哈,嘿嘿···

来源:百度知道 编辑:UC知道 时间:2024/06/24 08:04:35
#include<stdio,h>
#include<string,h>
void fun ( char *w,int m)
{ char s ,*p1,*p2;
p1=w;p2=w+m-1;
while (p1<p2)
{ s=*p1++;*p1=*p2--;*p2=s;}
}
main()
{ char a[]="ABCDEFG";
fun( a,strlen(a));puts(a);
}
程序结果是AGAAGAG
不明白什么?高手点破下拉!

char s[]="ABCD",*P;
(p=s;p<s+4;p++)printf ("%s\n",p);
结果是 ABCD
ABC
AB
A
里面p<s+4怎么理解?

在c里面,数组和指针其实是一回事,数组相当于一串地址连续的指针,所以,比如s分配到了100,101,102,103这四个地址,然后p=s就相当于p=100,p<s+4就相当于p<104喽。。。这样的判断只能用于连续的地址,如果是一个link的话,由于link的每个结点都是molloc出来的,地址不连续,就不能用p<link.length这种东西来判断了。

首先说你少打了个for
p=s,是将s的首地址赋给p,即指针p指向s中的第一个单元。p<s+4即跳出循环的条件。p++即指针指向下一地址。
好好看看for语句的描述,相信你会明白。