関連スレッドはこちら: C99 は配列が連続していることを保証しますか?
以下では明らかanswer()
に有効ではありませんが、char * を使用するか、int[nElements] にキャストするように書き直すことができます (おそらく)。標準参照が理解できないことと、適切に配置されている場合に int* を介して連続する int ブロックにアクセスできない理由を理解していないことを認めます。
まず、次のコード ブロックはほとんどの C++ プラットフォームで有効ですか?
void answer(int *pData, size_t nElements)
{
for( size_t i=0; i<nElements; ++i )
pData[i] = 42;
}
void random_code()
{
int arr1[1][2][3][4]; // local allocation
answer(arr1, sizeof(arr1) / sizeof(int));
int arr2[20][15];
answer(arr2, sizeof(arr2) / sizeof(int));
}
2 番目はanswer()
、すべての割り当てタイプ (グローバル、ローカル、ヒープ (願わくば正しい!)) で引き続き有効ですか?
int g_arr[20][15]; // global
void foo() {
int (*pData)[10] = new int[50][10]; // heap allocation, at least partially
answer(&pData[0][0], 50*10);
// not even sure if delete[] will free pData correctly, but...
}