我可以确定以下代码可以工作吗?
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以外的东西会发生什么,并提供标准的相关报价,则可以加分。
我想转发声明一个 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)
我的理解正确吗?有什么解决方法吗?