首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为什么指针越界操作可以得到正确结果!迷惑!该怎么解决

2012-02-24 
为什么指针越界操作可以得到正确结果!迷惑!今天想玩一下指针越界,看看有啥后果!~结果让我很迷茫程序如下:#

为什么指针越界操作可以得到正确结果!迷惑!
今天想玩一下指针越界,看看有啥后果!~结果让我很迷茫

程序如下:

#include   "stdio.h "

int   main()
{
static   int   test[100];
int*   pointer;
pointer   =   test;
int   i;
for(i=0;i <100;i++)
{
test[i]   =   i;
}

pointer   +=   40;
printf( "*pointer   is   %d.\n ",*pointer);
printf( "pointer[-10]   is   %d.\n ",pointer[-10]);
pointer[-10]   =   111;
pointer[-50]   =   222;
printf( "pointer[-10]   is   %d.\n ",pointer[-10]);
printf( "pointer[-50]   is   %d.\n ",pointer[-50]);
return   1;
}

为什么我对pointer[-50]赋值可以成功?并且还可以正确的读到赋值的结果!

[解决办法]
程序不提供数组越界保护,
你可以越界访问,
程序本身不理会。

但是如果越界时候,
访问了非法的内存空间,
那么程序就 Over 了 ~~

所以说,
越界本身可以,
但是始终,它是个问题!
[解决办法]
jixingzhong(瞌睡虫·星辰) 说的合理。。
本身程序没发保证你是否越界访问。。。 注:如果你读取的是越界内存的值,程序立马嘎本挂掉。
此时你越界赋值刚好是有效的内存地址。所以虽然你的指针已经指向了数组外,但仍可以赋值,只是篡改了其他地方用的内存而已(也相当的危险)。建议只是玩玩。

热点排行