keven 发表于 2006-12-25 14:28

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

想要输出1到10
#include <stdio.h>
void main()
{
    int a={1,2,3,4,5,6,7,8,9,10},*p;
    for (p=a;p<p+10;p++)
    printf("%d",*p);
    getch();
}
这里面到底有什么错的~~

gyCai 发表于 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~

powerwind 发表于 2006-12-25 16:08

p<p+10;这个条件为永真,我竟然看不出来.

jinry 发表于 2006-12-31 06:09

就算p<a+10这种程序也不可以要,
你能保证,a跟p指的地址在值是谁大谁小么,如果在不同的系统跑?

猪猪冻果 发表于 2006-12-31 18:43

那楼上有何高见??

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

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

iptton 发表于 2006-12-31 19:30

原帖由 猪猪冻果 于 2006-12-31 18:43 发表
那楼上有何高见??

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



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

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

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





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


有了解的高手请解释下

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

MJOfPowerwind 发表于 2006-12-31 20:39


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


以上代码是正确的。

一般我们可能习惯这样:

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


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

PS: 请当当注意语气

iptton 发表于 2006-12-31 20:45

我对jinry 师兄说的也同样存在这个疑问:
对于数组头指针的加法的低层实现
编译器是否会自动调整?

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


期待有相关经验的人士解答……
前一帖忘了提这个疑问
页: [1]
查看完整版本: 为什么不是我想要的结果?