请考虑以下代码:
int a[25][80];
a[0][1234] = 56;
int* p = &a[0][0];
p[1234] = 56;
Run Code Online (Sandbox Code Playgroud)
第二行是否调用未定义的行为?第四行怎么样?
c++ arrays pointers multidimensional-array undefined-behavior
我的嵌入式系统有一个支持C++ 11的g ++版本,所以我一直在清理代码
for( uint16_t* p = array; p < (&array)[1]; ++p ) {
*p = fill_value;
}
Run Code Online (Sandbox Code Playgroud)
至
for( uint16_t& r : array ) {
r = fill_value;
}
Run Code Online (Sandbox Code Playgroud)
这是多更具有可读性.
是否存在基于范围的for循环,它可以在所有元素上运行array2[m][n]?
旧版本是
for( int16_t* p = array2[0]; p < (&array2)[1][0]; ++p ) {
*p = fill_value;
}
Run Code Online (Sandbox Code Playgroud)
我不希望嵌套循环,除非保证编译器将它们展平.
(FWIW,编译器是TI Code Composer Studio 6.0.0附带的GNU 4.7.4 Linaro g ++ ARM交叉编译器)
所以,我总是知道在C/C++中传递的数组"对象"只包含数组中第一个对象的地址.
指向数组"对象"的指针和它包含的值如何相同?
有人可能会向我指出更多信息,也许是关于汇编中的所有信息.