次のコードを検討してください。
void populate(int *arr)
{
for(int j=0;j<4;++j)
arr[j]=0;
}
int main()
{
int array[2][2];
populate(&array[0][0]);
}
コードが有効かどうかについて、地域コミュニティで議論がありました(名前を言うことになっていますか?)。ある男は、それが違反しているのでUBを呼び出すと言っていました
C ++標準($ 5.7 / 5 [expr.add])
「ポインタオペランドと結果の両方が同じ配列オブジェクトの要素を指している場合、または配列オブジェクトの最後の要素を1つ過ぎている場合、評価はオーバーフローを生成しません。それ以外の場合、動作は未定義です。」
しかし、コードに問題はありません。コードは私にとって完全に問題ありません。
だから、私はこのコードが有効かどうか知りたいだけですか?私は何かが足りないのですか?