小编Fra*_*oVS的帖子

是否可以保证以大小为N * M的一维数组访问2D数组(T [N] [M])?

我可以确定以下代码可以工作吗?

int sum_array(int *array, size_t size)
{
  int i;
  int sum = 0;
  for (i=0;i<size;i++)
    sum += *(array+i);
  return sum;
}

int main()
{
  int two_d_array[4][3] = {{1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}};
  int sum = sum_array(&two_d_array[0][0], 12);
  printf("%d", sum);
}
Run Code Online (Sandbox Code Playgroud)

虽然将4 x 3数组完全像12个元素的数组那样布置在内存中是合理的,但是可以保证吗?由于我似乎在欺骗类型系统,因此我不确定会出问题(例如,将填充添加到int [3])。

如果您可以详细说明如果我在数组中使用int以外的东西会发生什么,并提供标准的相关报价,则可以加分。

c++ multidimensional-array language-lawyer c++11

8
推荐指数
1
解决办法
295
查看次数

C++:使用内部链接向前声明 const

我想转发声明一个 const 变量而不给它外部链接。然而,在我看来,这是不可能的,因为extern关键字同时意味着“这具有外部链接”和“这是一个变量声明,而不是定义”,而且我无法得到一个没有另一个:

//// main.cpp: ////

extern const char table[256];    // forward declaration. External linkage.
// const char table[256];        // Error: table requires an initializer
// static const char table[256]; // Same error

// foo uses table so I need it forward declared:
char foo()
{
    // uses table
}

const char table[256] = {...}; // Actual definition
Run Code Online (Sandbox Code Playgroud)

我的理解正确吗?有什么解决方法吗?

c++ constants extern linkage

6
推荐指数
1
解决办法
840
查看次数