此处的相关线程: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));
}
第二个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...
}