以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  荤菜求助:一个比较基本的关于指针的题目  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=46403)


--  作者:荤菜
--  发布时间:5/4/2007 11:18:00 PM

--  荤菜求助:一个比较基本的关于指针的题目
/*程序1,输入一个数,打印一个数*/
main()
{int a[10],*p,i;
p=a;
for(i=0;i<10;i++)
{scanf("%d",p++);     
  printf("%d ",*p);    /*问题1:打印出错,为什么不可以写成*p*/
  }
  getch();
}

/*程序2,输入十个数,打印十个数*/
main()
{int a[10],i,*p;
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);       /*问题2:无论在win-tc还是dev-c++都编译不通,我觉得p++和a++同样是数组的地址,但输入a++时却出现“需要逻辑0或非0在 main 函数中”这样的提示,为什么*/
p=a;
for(i=0;i<10;i++,p++)
printf("%d",*p);      /*问题1(找与程序1中问题1的差别):为什么可以写成*p*/
getch();
}


--  作者:荤菜
--  发布时间:5/4/2007 11:20:00 PM

--  
谢谢了.
--  作者:Davidlong
--  发布时间:5/5/2007 12:03:00 PM

--  
改为这样,问题1你就知道了
{int a[10],*p,i;
p=a;
for(i=0;i<10;i++)
{scanf("%d",p);
  printf("%d ",*p);    /*问题1:打印出错,为什么不可以写成*p*/
  p++;/*应打印后再递增,否则指向下一个去了,打印的是下一个不确定的值,而不是当前输入的
  }
  getch();
}

第二个问题,我在Win_tc下编绎通过,没有问题.


--  作者:荤菜
--  发布时间:5/5/2007 4:22:00 PM

--  
谢谢啦!我的程序2中第2个问题其实是这样的:为什么不能该成a++?还有"printf("%d",p++):"这不是把输入的一个值送到指针变量p的地址吗?我记得指针变量是不可以存放整数,只能存放地址的呀.
--  作者:Davidlong
--  发布时间:5/6/2007 10:08:00 AM

--  
楼主真好学,使我想起了我的学习时光
"为什么不能该成a++?"
     a是数组名,虽然也代表地址,但注意,只有变量才能改变值,而a是一个常量,所以a++不合法.

"还有"printf("%d",p++):"这不是把输入的一个值送到指针变量p的地址吗?"
是不是写错了应该是 scanf("%d",p++);吧,  这句话的意思是:输入一个整数,把它放到p所指向的变量的地址中去 . 例如 int i; int *p=&i;  假如输入 5,则把 5 放到 p 所指向的变量 即 i 的地址中,则 i 的值变成了 5.


--  作者:荤菜
--  发布时间:5/6/2007 11:35:00 PM

--  
谢谢啊
--  作者:Davidlong
--  发布时间:5/7/2007 6:24:00 AM

--  
其实还可以这样理解, scanf("%d",p); = scanf("%d",&i); 因为 p=&i;(当然要先初始化为p指向i)
--  作者:卷积内核
--  发布时间:5/7/2007 10:37:00 AM

--  

1、*p 是指针,打印输出应该是里面的内容 &p。
2、p 是指针可以++,但是a是数组名,应该是a[i++]。
--  作者:kutiny
--  发布时间:5/7/2007 9:05:00 PM

--  
先对LZ汗个。
这精神。。。好。。。自卑。。。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
2,480.469ms