LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 883|回复: 10

为什么会输出****出来

[复制链接]
发表于 2004-6-30 16:54:31 | 显示全部楼层 |阅读模式
[PHP]
int a[]={0,1,2,3,4};                                                                                                                  void main()
{   int i,*p1,*p2;  
for (i=0;i<=4;i++)   
printf("%d",a);   
printf("\n");
for (i=0;i<=4;i++)
{   p1=&a;
  printf("%d",*p1);
  }  
printf("\n");
  for (i=4;i>=0;i--)
{   p1=&a;
    p2=p1;   
    printf("%d!!!!",*p2);
  }  
printf("\n"); } [/PHP]


出来的结果是

01234
01234
4!!!!3!!!!2!!!!1!!!!0!!!!

可书上的结果说是0****1****2****3****4****
书上说,在第二个for语句中,下标值i从0变到4,在每轮循环中,都把一个元素的地址付给p1,然后利用间接的方式输出对应元素的值.如第一轮循环时,把a[0]的地址付给p1,*p1的值就是a[0]的值,所以输出"0****".


第二个循环中,p1=&a; 是把数组的i位置给了p1,输出为什么会有****,而我自己编译出来是没有****的,,,请问这是怎么回事 ?

看的书是c语言程序设计里的201页
发表于 2004-6-30 17:24:19 | 显示全部楼层

  1. #include <stdio.h>

  2. int a[]={0,1,2,3,4};                                                                                
  3. int main()
  4. {
  5.         int i,*p1,*p2;

  6.         for (i=0;i<=4;i++)
  7.                 printf("%d",a[i]);
  8.         printf("\n");

  9.         for (i=0;i<=4;i++)
  10.         {
  11.                 p1=&a[i];
  12.                 printf("%d",*p1);
  13.         }
  14.         printf("\n");

  15.         for (i=4;i>=0;i--) {
  16.                 p1=&a[i];
  17.                 p2=p1;
  18.                 printf("%d****",*p2);
  19.         }
  20.         printf("\n");

  21.         return 0;
  22. }
复制代码


拜托下次把代码排好再贴上来。
 楼主| 发表于 2004-6-30 17:33:54 | 显示全部楼层
好的,我会注意

请老大们帮帮我呀
发表于 2004-6-30 17:44:42 | 显示全部楼层
0****1****2****3****4****
书上这个结果错误。应该反过来。
发表于 2004-6-30 17:50:00 | 显示全部楼层
结果没错啊
01234
01234
4!!!!3!!!!2!!!!1!!!!0!!!!

for (i=4;i>=0;i--)
{   p1=&a;
    p2=p1;   
    printf("%d!!!!",*p2); //!!!!改为****就输出****了
发表于 2004-6-30 17:52:33 | 显示全部楼层
尽信书则不如无书
 楼主| 发表于 2004-6-30 18:11:01 | 显示全部楼层
最初由 Maitou 发表
结果没错啊
01234
01234
4!!!!3!!!!2!!!!1!!!!0!!!!

for (i=4;i>=0;i--)
{   p1=&a;
    p2=p1;   
    printf("%d!!!!",*p2); //!!!!改为****就输出****了


不是啊,书上的结果是这样的,并不是将!!!!改为****的

书上的结果是
01234
0****1****2****3****4****
4!!!!3!!!!2!!!!1!!!!0!!!!

跟我编译出来的结果不一样啊,

我编译的结果是
01234
01234
4!!!!3!!!!2!!!!1!!!!0!!!!


这样子说来我理解没错,是书上错 ?
 楼主| 发表于 2004-6-30 19:27:31 | 显示全部楼层
老大们请帮帮我,,,上面我说的对不对,,我会这样发问是缺少c方面哪些知识 ?
发表于 2004-6-30 20:43:23 | 显示全部楼层
屏幕打印内容和格式化输出函数 printf 所带的参数有关。
for (i=0;i<=4;i++)
{   p1=&a;
  printf("%d",*p1);
  }  
在该循环中,使用 %d,表示打印的是一个整数,输出自然是 01234。

  for (i=4;i>=0;i--)
{   p1=&a;
    p2=p1;   
    printf("%d!!!!",*p2);
  }
而这个循环中 %d 后添了几个 !!!!, 输出自然为  4!!!!3!!!!2!!!!1!!!!0!!!!

很想说一句,千万不要做书呆子呀!
还有不是我想说你,现在你的 c 语言知识不是一般的缺乏,而是匮乏,找几本好书多看看。
 楼主| 发表于 2004-6-30 21:01:35 | 显示全部楼层
好的,谢谢你们
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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