C++ > stdint.h > sizeof(int[][3])とsizeof(uint8_t[][3]) > 48と12


動作環境
ideone > C++14
C++ Builder XE4でも確認

C++ Builder XE4で実装していたプログラムにてstdint.hを使い始めて、はまった。

#include <iostream>
using namespace std;
#include <stdint.h>

static const int kTable_cond1[][3] = {
    { 1, 0, 0 },
    { 0, 1, 0 },
    { 0, 0, 1 },
    { 0, 1, 1 }
};
static const uint8_t kTable_cond2[][3] = {
    { 1, 0, 0 },
    { 0, 1, 0 },
    { 0, 0, 1 },
    { 0, 1, 1 }
};

int main() {
    printf("%zu\n", sizeof(kTable_cond1));
    printf("%zu\n", sizeof(kTable_cond2));
    return 0;
}
結果
48
12

上記の違いにより
int tbl[3];
int sizeCond = sizeof(kTable_conditions) / sizeof(tbl);
の結果が4と1の違いが出て、はまった。



@SaitoAtsushi さんに上記に関する詳細記事を用意いただきました。

感謝です。