为什么代码适用于第二种情况
Why is the code working for the second case?
#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()
访问它,您将获得未定义的行为。
相关文章:
- C++:我的开关盒循环转到第一种情况
- 两种情况下的输出不应该相同吗?
- 为什么'const'在这两种情况下的行为不同?
- 在哪种情况下,C++会在编译时进行数组边界检查?
- free():仅在一种情况下指针无效
- 程序在开关中执行第二种情况后崩溃
- 在两种情况下,铸造的工作方式不同
- 如果ConstexPR似乎仅在两种情况有效时起作用
- 为什么在一种情况下,我会收到带有字符串文字的已弃用转换警告,而在另一种情况下却没有?
- switch 语句中的输入错误 如何循环回第一种情况?C++
- 在游戏地图上选择100种情况的最佳方法(MFC,CPoint)
- 我如何仅在一种情况下或某些情况下专业攻击效果
- 在哪种情况下,可以在堆栈上分配
- 空格很重要的另一种情况(也许?
- StrcMP的两种情况
- 哪种情况更有效
- 我的代码将不会显示为每种情况C 的代码
- 程序在没有调试符号的情况下崩溃,运行良好(两种情况下都没有优化或任何内容)
- 在每种情况下都执行“std::set”对元素进行排序
- 为什么模板参数只能在一种情况下推导