工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1044|回复: 8

为什么不是我想要的结果?

[复制链接]
发表于 2006-12-25 14:28 | 显示全部楼层 |阅读模式
想要输出1到10
#include <stdio.h>
void main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,10},*p;
    for (p=a;p<p+10;p++)
    printf("%d",*p);
    getch();
}
这里面到底有什么错的~~
发表于 2006-12-25 15:48 | 显示全部楼层
p增则p+x增......
回复

使用道具 举报

发表于 2006-12-25 15:55 | 显示全部楼层
for (p=a;p<p+10;p++)
应该是  for (p=a;p<a+10;p++)
         当p<a+10时候则执行,
       当不属于这个条件的时候就结束循环
    你用p<p+10这个条件是永远成立的~~会一直执行下去的~
       1永远小于1+10~
回复

使用道具 举报

发表于 2006-12-25 16:08 | 显示全部楼层
p<p+10;这个条件为永真,我竟然看不出来.
回复

使用道具 举报

发表于 2006-12-31 06:09 | 显示全部楼层
就算p<a+10这种程序也不可以要,
你能保证,a跟p指的地址在值是谁大谁小么,如果在不同的系统跑?
回复

使用道具 举报

发表于 2006-12-31 18:43 | 显示全部楼层
那楼上有何高见??

编了一年多程,,一直都是一个数组里的元素认为它是按地址到高地址存
也好像没有出错过,,,
楼上能给出在任意系统的答案么?

[ 本帖最后由 猪猪冻果 于 2006-12-31 18:44 编辑 ]
回复

使用道具 举报

发表于 2006-12-31 19:30 | 显示全部楼层
原帖由 猪猪冻果 于 2006-12-31 18:43 发表
那楼上有何高见??

编了一年多程,,一直都是一个数组里的元素认为它是按地址到高地址存
也好像没有出错过,,,
楼上能给出在任意系统的答案么?




有两种保存数据的方式,
一种从高位到低位,
一种从低位到高位,

如果我没记错的话,
这是操作系统(或者说文件系统,比如FAT16 FAT32)实现方面的差别

一般情况下,不用考虑到这个区别的





这个又提醒了我上次讨论过的一个问题:
数组中的元素是否一定排在连续的内存上


有了解的高手请解释下

[ 本帖最后由 iptton 于 2006-12-31 19:42 编辑 ]
回复

使用道具 举报

发表于 2006-12-31 20:39 | 显示全部楼层

  1. #include <stdio.h>
  2. void main()
  3. {
  4.     int a[10]={1,2,3,4,5,6,7,8,9,10},*p;
  5.     for (p=a;p<a+10;p++)
  6.     printf("%d",*p);
  7.     getch();
  8. }
复制代码


以上代码是正确的。

一般我们可能习惯这样:

  1. #include <stdio.h>
  2. void main()
  3. {
  4.     int a[10]={1,2,3,4,5,6,7,8,9,10},*p;
  5.     int j;
  6.     p=a;
  7.     for (j=0;j<10;j++)
  8.     printf("%d",*(p+j));
  9.     getch();
  10. }
复制代码


深入的理解,我没有。但C语言的教材中,会提到 p[j] 与 *(p+j)是等效的,而我们访问数组某个元素时用下标来访问是正确的。

PS: 请当当注意语气
回复

使用道具 举报

发表于 2006-12-31 20:45 | 显示全部楼层
我对  jinry 师兄说的也同样存在这个疑问:
对于数组头指针的加法的低层实现
编译器是否会自动调整?

也就是说,代码是可移植的,只是编译后的二进制文件 不可以(废话…… 移植性只针对源代码  - -#)


期待有相关经验的人士解答……
前一帖忘了提这个疑问
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-17 05:13

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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