3

関数の引数が同じ型の場合、次のコードは明確に定義されており、移植可能ですか?

void foo(int* p, int size);
void pass_on_args_by_pointer(int a, int b, int c)
{
    foo(&a, 3);
}

明確にするために: 'size' 引数には、配列 p の要素数を含める必要があります。したがって、3 つの int をすべて foo に渡したいと思います。

4

3 に答える 3

7

いいえ、これは移植性がなく、明確に定義されていません。コンパイラは、メモリ内の隣接する場所に関数パラメータを割り当てる必要はありません。実際、アドレスを取得していないため、パラメータbをメモリに配置する必要はまったくありません。スルーインcの境界を超えるアクセスは未定義の動作です。intpfoo

于 2013-08-14T10:45:05.390 に答える