c++对多维数组进行迭代
c++ iterate over multidimensional array
下面是一个在多维数组上迭代的例子。正如我所检查的那样(使用g++ 4.8.1编译)。我的问题是:为什么它会起作用?为什么元素数组的最后一个元素是指向NULL指针的指针?
struct Test {
int i;
};
Test** tab = new Test*[12];
for (int i=0; i<12; ++i) {
tab[i] = new Test();
tab[i]->i = i;
}
while (*tab != NULL) {
std::cout<<(*tab)->i<< std::endl;
++tab;
}
您正在看到编译器试图将堆栈对齐到特定的多个字节边界的副作用。当它这样做时,您将看到缓冲区后的零填充。
考虑下面的程序,我试图抓住问题的本质,而不使用多余的循环。
#include <stdio.h>
#define SIZE 12
struct Test {
int i;
};
int main(){
Test** tab = new Test*[SIZE];
for (int i=0; i<SIZE; ++i) {
tab[i] = new Test();
tab[i]->i = i;
}
printf("%pn", *(tab + SIZE));
}
如果您在我的系统上将#define 12
更改为#define 13
,则输出将不再是nil
。
这意味着它不确定地工作,并且您确实很幸运。
相关文章:
- 如何以优化的方式同时迭代两个间距不相等的数组
- 为什么我的 scanf() 没有在我的数组上迭代我的 for 循环?
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 在C++中使用 for 循环的数组迭代
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- 获取 c++ 中具有恒定长度的数组的迭代器
- 指针到指针 2-D 数组中的迭代
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 迭代一组和擦除元素
- 为自定义数组实现迭代器
- C++,删除函数/迭代进程中定义的动态数组
- 迭代 txt 文件中的对象数组
- 原始数组和 std::array 在 clang++ 和 VC++ 上的不同迭代器行为
- 用std :: apply迭代元组元素
- C :优雅地迭代一组数字
- 在 C++17/20 中迭代元组
- 如何在表达式中迭代命名组
- Boost c++ -动态迭代多数组
- 如何在c++映射中迭代一组特定的键