C++ 遍历多维数组

标签 c++ 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("%p\n", *(tab + SIZE));
}

如果在我的系统上将 #define 12 更改为 #define 13,输出将不再是 nil

这意味着它不能确定性地工作,而您确实走运

关于C++ 遍历多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746733/

相关文章:

c# - 快速加载/保存多维数组

jquery - 如何检查数组是否是多维的? (jQuery)

c++ - matlab中for循环的嵌套条件,如c++

java - 二维数组java中的Arrayindexoutofbounds

c++ - 有什么简单的方法可以找到当前的工作目录吗? C++

c++ - 传递给虚拟析构函数的这个额外参数是什么?

java - Java 中的二维数组

javascript - 在多维数组中查找 int 并在 Angular JS 中应用类

c++ - Xcode 4.2 OpenMP : linker error?

c++ - 使用 GetFileSize 获取文件大小报告有效文件的 segv