VC6 数组在局部变量时候默认值不是为0吗?求更正

来源:360问答  责任编辑:小易  

#include "stdafx.h"

int main()

{   

int i=0;

int j=0;

int arr[] = {0,2,0,9,4,2,0,3,0,2,10};

int arr1[] = {0};

int length = sizeof(arr) / sizeof(int);

for (int b = 0 ; b<length ; b++)

{

//for (int c=0 ; c<length-1 ; c++)

//{

// if (b == arr[i+1+c]) 

//{

 //arr1[b] = arr1[b] +1 ;

//}

//}

printf("%d\n",arr1[b]);  //<==不知道拿来的值

}

return 0;

}

从理论上讲,你的程序有大问题的,你的

int arr1[] = {0};

定义了数组arr1,它的长度为1,实际下标只能是arr1[0]

而你用了arr的长度(11)

在循环中,理论上,arr1[1]已是下标溢出,结果已不是你预料的了(下标溢出,程序若能继续运行,结果不可预料 )

当然,在实际中(VC6),因为变量定义在栈上,内存分配时从下到上

若当前内存指针为ebp,则有

arr1[0]=ebp-11*4 arr[0]=ebp-10*4 arr[1]=ebp-9*4 arr[2]=ebp-8*4 arr[3]=ebp-7*4 arr[4]=ebp-6*4 arr[5]=ebp-5*4 arr[6]=ebp-4*4 arr[7]=ebp-3*4 arr[8]=ebp-2*4 arr[9]=ebp-1*4 arr[10]=ebp-0*4

所以输出的结果为

arr1[0]=0 arr1[1]=arr[0]=0 arr1[2]=arr[1]=2 arr1[3]=arr[2]=0 arr1[4]=arr[3]=9 arr1[5]=arr[4]=4 arr1[6]=arr[5]=2 arr1[7]=arr[6]=0 arr1[8]=arr[7]=3 arr1[9]=arr[8]=0 arr1[10]=arr[9]=2

几点

1。不建议费时研究不常见的内容(如下标溢出的结果),除非你有足够的能力、时间及兴趣

2。VC++6是上世纪基于win95开发的编译器,早淘汰了,除了考古,也不建议研究它

3。只有初始化的局部变量才有值,若是int arr[5];它的值是随机的(看当前内存中的值)


  • 本文相关:
  • 如何在VC6里定义全局变量
  • VC6调试 QuickWatch变量修改问题
  • VC6一维数组和函数调用
  • 为什么我用VC6的时候使用using std::cout;这个的时候,出现的那...
  • VC6将数组显示在屏幕上的问题
  • VC6如何取数组数目
  • 解决VC6和VC2008的for循环变量作用域不同问题的一个方法,...
  • vc6 CCheckBox关联的BOOl类型变量鼠标放上面提示为int类型...
  • VC6关于指针和数组的报错
  • 怎么改变VC6到VS2010编译器的环境变量?
  • VC6。0为什么定义结构数组不能用float
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved