" target="_blank">God Bless You[GLOW=255,#00ff00,2]My Friends![/GLOW]
结果确实是不一样的。
正如ww84020209同学所说,*p2和*p3指针都指向了不是程序员所设想的位置,LZ犯了写C程序的大忌。
我分析产生上述错误的原因:*p2和*p3指针都经过了初始化,并且在循环里都是按等差递增的,所以指向的位置是可以预期的。
刚好指到了程序编译时存储变量的位置,但是具体是什么变量又不一定(由ch3后面定义的变量而定),所以会产生上述问题,既在交换定义变量的顺序时,可能运气很好,指针越界刚好指到了空,运行结果就会正确;也可能运气不好,刚好指到的位置有值,就会打出乱码。
下面是我修改的代码:(红色位置作了修改,请参考)
#include <stdio.h>
void main()
{
char ch1[5] = { 'H' , 'e' , 'l' , 'l' , 'o' },
ch2[5] = { 'W' , 'o' , 'r' , 'l' , 'd' },
ch3[10];
char *p1 = ch1,
*p2 = ch2,
*p3 = ch3;
int i,j;
/*
p1 = ch1;
p2 = ch2;
p3 = ch3;
*/
for ( i=0 ; i<5 ; i++ )
{
*p3 = *( p1 + i );
p3++;
}
for ( j=0 ; j<10 ; j++ )
{
if ( j < 5 )
{
*p3 = *( p2 + j );
p3++;
}
printf ( "%c" , ch3[j] );
}
printf ( "\n" );
}
综上所述,再用C语言写代码时,请慎用指针!!!