鱼C论坛

 找回密码
 立即注册
查看: 8901|回复: 57

指针,一个不容易发现的错误

  [复制链接]
发表于 2012-9-3 18:06:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

void main()
{
     int *p,i,a[10];

      p=a;
      for(i=0;i<10;i++)
{
       scanf("%d",p++);
}
       printf("\n");

       for(i=0;i<10;i++,p++)
{
  printf("%d",*p);
}
}


请大家指出错误,谢谢
未命名.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-3 19:37:52 | 显示全部楼层
p只初始化了一次,输出时,i=0时 ,p的值已经是&a[9]+4
所以 要先把p的值改回为&a[0]
#include <stdio.h>

void main()
{
     int *p,i,a[5];
      p=a;
      for(i=0;i<5;i++)
          {
       scanf("%d",p++);
          }
           p=a;       printf("\n");
       for(i=0;i<5;i++,p++)
           {
       printf("%d\n",*p);          
           }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 6

使用道具 举报

发表于 2012-10-15 23:26:39 | 显示全部楼层
人才!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-29 15:56:56 | 显示全部楼层
:lol原来如此 .脑筋急转弯了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-29 21:03:53 | 显示全部楼层
p的值改变了         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-10-29 22:12:58 | 显示全部楼层
表示很纠结
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-1 08:39:30 | 显示全部楼层
谢谢指导。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-4 15:54:11 | 显示全部楼层
在第二次调用printf是p的值已经超出了数组的范围了,要把p重新赋予a的值,就是在第二个printf前加个p=a;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-9 17:15:14 | 显示全部楼层
我又有一个新问题、、
在单步调试的时候,我发现我按了找了一下*p的值和*p++的值。它的值好像不如scanf函数我们当前输入的值?
求解答为何会这样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2013-1-5 19:23:26 | 显示全部楼层
本帖最后由 #~帝王之焰~# 于 2013-1-5 19:38 编辑


#include <stdio.h>
void main()
{
      int *p,i,a[10];
       p=a;
       for(i=0;i<10;i++)
{
        scanf("%d",p++);
}
        printf("\n");
        for(i=0,p=a;i<10;i++,p++)
{
   printf("%d",*p);
}
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-5 21:32:36 | 显示全部楼层
最后一次调用已超出数组范围,系统将分配任意一块内存~~于是最后的值将是不可预料的值~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-6 18:20:31 | 显示全部楼层
指针越界了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-10 01:31:26 | 显示全部楼层
#include <stdio.h>
int main()
{
     int *p,i,a[10]={
             
     };
      p=a;
      for(i=0;i<10;i++)
{
       scanf("%d",p++);
}
       printf("\n");
       for(i=0,--p;i<10;i++,p--)
{
  printf("%d\t",*p);
}
}
可以到这dayin


1 2 3 4 56 7 8 9 056 45

45      56      9       8       7       56      4       3       2       1
请按任意键继续. . .

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2013-3-14 07:49:47 | 显示全部楼层
确实容易忽略这个细节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-14 14:19:14 | 显示全部楼层
厉害,真难找{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-14 15:42:46 | 显示全部楼层
表示很纠结
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-19 00:16:40 | 显示全部楼层
程序没有错误。你逻辑错误,你声明了一个数组   但是数组你没初始化的时候  里面存的就是随机值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2013-3-19 01:03:45 | 显示全部楼层
中国人习惯用1开头,美国人习惯用0开头,没办法,学人家的东西,就得跟着人家习惯来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-19 01:04:46 | 显示全部楼层
我一开始还没发现,也有点粗心,指针越界我写时不会,但看别人程序,有时不用心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-25 17:21:11 | 显示全部楼层
我也看出来了。哈哈!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表