c - 如何在循环中声明分配的数组?
问题描述
我对这个功能感到困惑。
int i;
for(i = 1; i<10; i++){
int arr[i];
printf("%d\n",sizeof(arr));
}
return 0;
空间如何在有界(由 ESP)堆栈内存中增长?有没有一种编译技巧?
编辑解释:堆栈不应该是这样的吗?
0 ---> val of i uninitialized
-4 ---> arr[0] uninitialized
在第一个循环之后
0 ---> val of i uninitialized
-4 ---> arr[1] uninitialized
-8 ---> arr[0] uninitialized
我很想说:ESP 是否在循环的每次迭代下方移动?
解决方案
空间如何在有限大小的堆栈内存中增长?
你指的是空间char arr
——它的空间不会增长。for
它是循环范围内的局部变量。所以每次循环有一个新i
的它都是一个全新的char arr
.
推荐阅读
- asp.net-core - .Net Core 扩展 IdentityUserRole 以包含 Instance/Company 并扩展 RoleManger 以获取 Instance
- c# - 将 2 个文本框文本与分隔符组合
- api - 如何发现 []byte 是数组还是单个对象
- c++ - 你能安全地从它的 c_str() const char* 中获取一个指向字符串的指针吗?
- xml - XSL-FO - 将背景图像添加到多个 PDF 页面
- swift - SwiftUI UISearchController searchResultsController 导航堆栈问题
- swiftui - 仅在图表框架中捏缩放图表 SwiftUI
- swift - iCloud数据备份烦恼
- c++ - 生成有序配对
- c - 如何检测读写器问题中的饥饿