此处的相关线程: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...
}