解释C语言中未初始化的数组访问的概念

问题

如果使用未初始化的数组,则使用C语言执行程序吗?

解决方案

  • 如果我们使用任何未初始化的数组,则编译器将不会生成任何编译和执行错误。

  • 如果未初始化数组,则可能会得到不可预测的结果。

  • 因此,最好总是使用默认值初始化数组元素。

范例程序

以下是访问未初始化数组的C程序-

#include <stdio.h>
int main(void){
   int a[4];
   int b[4] = {1};
   int c[4] = {1,2,3,4};
   int i; //循环计数器
   //打印所有数组的所有元素
   printf("\nArray a:\n");
   for( i=0; i<4; i++ )
      printf("arr[%d]: %d\n",i,a[i]);
   printf("\nArray b:\n");
   for( i=0; i<4; i++)
      printf("arr[%d]: %d\n",i,b[i]);
   printf("\nArray c:\n");
   for( i=0; i<4; i++ )
      printf("arr[%d]: %d\n",i, c[i]);
   return 0;
}
输出结果

执行以上程序后,将产生以下结果-

Array a:
arr[0]: 4195872
arr[1]: 0
arr[2]: 4195408
arr[3]: 0

Array b:
arr[0]: 1
arr[1]: 0
arr[2]: 0
arr[3]: 0

Array c:
arr[0]: 1
arr[1]: 2
arr[2]: 3
arr[3]: 4

笔记

如果我们不初始化数组,则默认情况下,它会打印垃圾值,并且永远不会显示错误。

考虑另一个用于访问未初始化数组的C程序-

示例

#include <stdio.h>
int main(void){
   int A[4];
   int B[4] ;
   int C[4] = {1,2};
   int i; //循环计数器
   //打印所有数组的所有元素
   printf("\nArray a:\n");
   for( i=0; i<4; i++ )
      printf("arr[%d]: %d\n",i,A[i]);
   printf("\nArray b:\n");
   for( i=0; i<4; i++)
      printf("arr[%d]: %d\n",i,B[i]);
   printf("\nArray c:\n");
   for( i=0; i<4; i++ )
      printf("arr[%d]: %d\n",i, C[i]);
   return 0;
}
输出结果

执行以上程序后,将产生以下结果-

Array a:
arr[0]: 4195856
arr[1]: 0
arr[2]: 4195408
arr[3]: 0

Array b:
arr[0]: -915120393
arr[1]: 32767
arr[2]: 0
arr[3]: 0

Array c:
arr[0]: 1
arr[1]: 2
arr[2]: 0
arr[3]: 0