C填充数组而不被要求

Kin*_*ird 1 c arrays

我正在C中玩一些基础知识.我有一个数组,我在位置0,1,2,3,4,5填充一个基本的for循环.问题是:当我尝试将其打印出来时,它会在我从未打算触摸的位置打印出奇怪的值(位置6-13).

代码:

#include <stdio.h>

#define MAXSIZE 16

int main()
{
  int array[MAXSIZE];
  int array2[MAXSIZE] = {0, 1, 2, 3, 4, 5};

  int i;

  for(i = 0; i < 6; i++)
  {
        array[i] = i;
  }

  for( i = 0; i < sizeof(array) / sizeof(int); i++)
  //for( i = 0; i < 10; i++ )
  {
        printf("%d", array[i]);
  }

  printf("\n");

  for(i = 0; i < sizeof(array2) / sizeof(int); i++)
  {
        printf("%d", array2[i]);
  }

 // printf("%lf\n", array[2]);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

0 1 2 3 4 5 822123896 32766 810140152 32643 816205824 32643 816288200 32643 0 0

0 1 2 3 4 5 0 0 0 0 0 0 0 0 0 0

注意:array是问题所在.array2只是另一个似乎正常工作的测试人员.这只是内存在C中运行的方式吗?为什么最后2个值array会回到'0'那么?!

dbu*_*ush 8

array尚未初始化,并且未在文件范围定义,因此其值是不确定的.稍后您分配给数组的某些元素,但这与初始化不同.

然后,当您打印完整数组时,将打印这些不确定的值.至于为什么这些值中的一些是0,因为所有未分配的值都是不确定的,0与任何其他值一样好.另请注意,不确定值可能是陷阱表示,这意味着它不是该数据类型的有效表示形式.如果尝试读取陷阱表示,则调用未定义的行为.

相比之下,array2 初始化.您为数组的前6个元素赋值,其余元素初始化为0.