为什么代码适用于第二种情况

Why is the code working for the second case?

本文关键字:二种 情况 代码 适用于 为什么      更新时间:2023-10-16
#include <iostream> 
int *parray(int a[100][100],int m , int n) 
{   int b[200],i, t , j;
    i = 1;
    j = t = 0;
    for(int i = 0; i < m ; i++)
    for(int j = 0; j < n ; j++)
    b[t++] = a[i][j];
    //      for(int i = 0; i < m*n ; i++)      
    //      std::cout<<b[i]<<' ';
    return b;
}
int main()
{
  int a[100][100],m,n,*b;
  std::cin>>m>>n;
  for(int i = 0; i < m ; i++)
  for(int j = 0; j < n ; j++)
   std::cin>>a[i][j];
  b = parray(a,m,n);
  for(int i = 0; i < m*n ; i++)
   std::cout<<b[i]<<' ';
  return 0;
}

当输入为

     2 2 1 2 3 4 

输出为

     1 2 612675848 32767

但是当我在函数返回之前删除两个"//"时parray()输出变为:

     1 2 3 4 1 2 3 4

有人可以告诉我为什么代码在传递前打印值时有效吗?

parray()中的int b[200]parray()的本地。它从函数返回的堆栈中删除。(当范围结束时(。

如果您稍后在main()访问它,您将获得未定义的行为。