posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

 

#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 ;
    }
}

说这个循环因为对数组的越界访问会造成死循环,其实是不一定的,越界访问无庸置疑,但是不是造成死循环,是依赖编译器对变量的空间分配而决定的

只有注册用户登录后才能发表评论。