august 发表于 2007-7-16 00:21:01

程序问题

#include<stdio.h>
void main()
{
    int a,b;
    int *p1,i;
    int    *p2;
   
    printf("请输入5个整数:");
    for (i=0;i<5;i++)
    {
      scanf("%d",&a);
      
    }
    printf("原始数组:");
    for (i=0;i<5;i++)
    {
      printf("%d",a);
    }
    printf("左右反转顺序:\n");

    p1=a;
    p2=b+4;
    for(;p1<a+5;p1++,p2--)
      *p2=*p1;
     p2=b; ----------------------------------->为什么这里要加上这句才能正常运行呢,
                    在上面的循环中不是已使p2回到b了吗?
    for(;p2<b+5;p2++)
      printf("%d ",*p2);

   
}

Zelsazgh 发表于 2007-7-16 20:23:27

事实上循环中的计数与下面计算是没有关系的.....比如
for(i=1;i>10;i++)
      i=10;
并不影响整个循环的十次运行.....因为在for里i已经是局部变量了.

august 发表于 2007-7-16 23:18:17

for(i=0;i<10;i++)
    {
      i=10;
      printf("*");
    }
影响啊,好像这样,只可以打印一次

FantasyDR 发表于 2007-7-16 23:33:25

如果这样定义
for(int i=0;i<10;i++)
{
// i只在这里起作用
}
如果是lz那种,那么i不是for循环的局部变量。

但无论如何,
事实上循环中的计数与下面计算是没有关系的.....比如
for(i=1;i>10;i++)
      i=10;
并不影响整个循环的十次运行.....因为在for里i已经是局部变量了.
这种说法是不对的……

lz的问题:

p1从a开始一直到a+5,那么有a+1,a+2,a+3,a+4,a+5
而p2从b+4开始,也有这么多次循环:
b+3,b+2,b+1,b,b-1...

所以循环结束的时候,p2指向的不是b而是b-1

正确的写法是把p2放在循环里面
{
*p1=*p2;
p2--;
}

这样p2就会少执行一次……

Zelsazgh 发表于 2007-7-17 09:37:56

看来昨晚我病得不轻啊....四处说胡话.....
真是太对不起了....

august 发表于 2007-7-17 14:15:06

别整天顾着看靓女
页: [1]
查看完整版本: 程序问题