c ++迭代多维数组

时间:2014-05-19 20:32:50

标签: 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;
}    

1 个答案:

答案 0 :(得分:2)

您正在看到编译器尝试将堆栈与特定的字节边界对齐的副作用。当它执行此操作时,您将在缓冲区后看到零填充。

考虑下面的程序,我试图在没有太多无关循环的情况下捕捉问题的本质。

#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

这意味着它确定无法正常工作,而你确实幸运