Posted on 2006-06-08 20:21
魔のkyo 阅读(447)
评论(0) 编辑 收藏 引用 所属分类:
Programming
#include
<
iostream
>
using
namespace
std;
int
main ()
{
int
a
=
1
,b[
5
]
=
{
2
,
3
,
4
,
5
,
6
},c
=
7
;
printf(
"
%d %d %d\n
"
,b[
-
1
],b[
0
],b[
5
]);
printf(
"
%d %d %d\n
"
,
&
b[
-
1
],
&
b[
0
],
&
b[
5
]);
//
system("pause");
}
在VC++6.0下得到输出
7 2 1
1245028 1245032 1245052
在DEV-CPP4.9.9.0下得到输出
7 2 8
2293572 2293576 2293596
总结:
1.数组可以使用负整数下标。并且此时依然有
*(p+k)和p[k]等价,无论k是正整数还是负整数。
2.对局部自动变量的空间分配是编译器决定的,不一定连续定义的变量空间就是连续的。
PS:以前看到过一个例子,大概是
int
main ()
{
int
i,a[
10
];
for
(i
=
1
;i
<=
10
;i
++
){
a[i]
=
0
;
}
}
说这个循环因为对数组的越界访问会造成死循环,其实是不一定的,越界访问无庸置疑,但是不是造成死循环,是依赖编译器对变量的空间分配而决定的