hiasaster 发表于 2015-4-7 21:49:43

原题为:
#include<stdio.h>      
void main()
{
      int *p, i, a;

      p = a;

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

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

这里的第一个遍历之后指针p已经指向了&a,所以在第二次遍历中打印的是a+9个未知乱码。。
只需把第一次遍历的p++改为p+i即可。。循环赋值之后p仍指向&a.

hyuk 发表于 2015-4-8 15:47:37

运行完了,表示结果正确呀。
p++表示指针p移到数组a的下一个元素处,而不是下一个地址。
输出了下地址,p跟p++的值相差4,即一个int型数组元素占4个字节。

Rktf 发表于 2015-6-21 19:11:43

21楼正解

墨尔卡娜 发表于 2015-7-24 12:55:56

p=a;的时候,p里的地址确实与数组指针的地址一样,但是因为定义的指针不是连续的,而数组指针是连续的,虽然p++了,但是没有让a+i与p+i相等,所以p++之后,p成为了野指针?是这个意思吗?

咱有理想 发表于 2015-7-25 15:52:51

你逐步调试,注意p,即指针指向的地址,,对比前后p值得区别,你会发现地址其实是错的。指针变量的指向地址一当改动就改动,就像全局变量一样。

咱有理想 发表于 2015-7-25 15:54:07

在每个for语句前加p=a;就OK了,不信试一下,我也是改了一个多钟才发现的

泳爸 发表于 2016-7-14 12:22:03

21L正解,楼主的题我复制粘贴运行正常。
页: 1 [2]
查看完整版本: 一个指针不容易发现的错误