为什么不是我想要的结果?
想要输出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();
}
这里面到底有什么错的~~ p增则p+x增...... for (p=a;p<p+10;p++)
应该是for (p=a;p<a+10;p++)
当p<a+10时候则执行,
当不属于这个条件的时候就结束循环
你用p<p+10这个条件是永远成立的~~会一直执行下去的~
1永远小于1+10~ p<p+10;这个条件为永真,我竟然看不出来. 就算p<a+10这种程序也不可以要,
你能保证,a跟p指的地址在值是谁大谁小么,如果在不同的系统跑? 那楼上有何高见??
编了一年多程,,一直都是一个数组里的元素认为它是按地址到高地址存
也好像没有出错过,,,
楼上能给出在任意系统的答案么?
[ 本帖最后由 猪猪冻果 于 2006-12-31 18:44 编辑 ] 原帖由 猪猪冻果 于 2006-12-31 18:43 发表
那楼上有何高见??
编了一年多程,,一直都是一个数组里的元素认为它是按地址到高地址存
也好像没有出错过,,,
楼上能给出在任意系统的答案么?
有两种保存数据的方式,
一种从高位到低位,
一种从低位到高位,
如果我没记错的话,
这是操作系统(或者说文件系统,比如FAT16 FAT32)实现方面的差别
一般情况下,不用考虑到这个区别的
这个又提醒了我上次讨论过的一个问题:
数组中的元素是否一定排在连续的内存上
有了解的高手请解释下
[ 本帖最后由 iptton 于 2006-12-31 19:42 编辑 ]
#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: 请当当注意语气 我对jinry 师兄说的也同样存在这个疑问:
对于数组头指针的加法的低层实现
编译器是否会自动调整?
也就是说,代码是可移植的,只是编译后的二进制文件 不可以(废话…… 移植性只针对源代码- -#)
期待有相关经验的人士解答……
前一帖忘了提这个疑问
页:
[1]