带C的数组 - 这些数字是什么?

时间:2015-09-27 09:49:07

标签: c arrays

我用C:

创建了这个小软件
#include <stdio.h>
#include <stdlib.h>

void print_this_list(int size){
    int list[size];
    for (int i = 0; i < size; i++) {
        printf("%d\n", list[i]);
    }
}

int main(int argc, char *argv[]){

    print_this_list(25);
    return 0;

}

执行结果非常有趣(显然)随机数:

-1519340623
859152199
-1231562870
-1980115833
-1061748797
1291895270
1606416552
32767
15
0
1
0
104
1
1606578608
32767
1606416304
32767
1606423158
32767
1606416336
32767
1606416336
32767
1
Program ended with exit code: 0  

这些数字究竟是什么以及它们背后的“逻辑”是什么?

2 个答案:

答案 0 :(得分:9)

他们背后没有逻辑。这是未定义的行为

void print_this_list(int size){
int list[size];             // not initialized 
for (int i = 0; i < size; i++) {
    printf("%d\n", list[i]);             // still you access it and print it 
  }
}

list未初始化并且您打印它的内容(这是不确定的)。因此,您获得一些随机垃圾值作为输出。

为了开始工作,您需要初始化它。你可以试试这个 -

  void print_this_list(int size){
  int list[size];             
  for (int i = 0; i < size; i++) {
    list[i]=i;                 // storing value of i in it before printing        
    printf("%d\n", list[i]);             
    }
  }

答案 1 :(得分:0)

它是垃圾。未初始化的价值

如果你尝试

    int x; // i define x as uninitialized variable some where in the memory (non empty)
    printf("%d",x); // will print trash "unexpected value  
    // if i do this 
    int x=10;//i define x with initial value so i write over the trash was found in this block of the memory . 

如果我打印出范围索引为

  int ar[10];
  for(int i=0;i<10;i++)
      ar[i]=rand();
  printf("%d\n",ar[10]);//out of index uninitialized index it will print trash . 

我希望得到帮助