c++对多维数组进行迭代

c++ iterate over multidimensional array

本文关键字:迭代 数组 c++      更新时间:2023-10-16

下面是一个在多维数组上迭代的例子。正如我所检查的那样(使用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

这意味着它不确定地工作,并且您确实很幸运