1

理由はありますか:

void function_foo(){
    int k[8];
    function_math(k, 8);
}

void function_math(int *k, int i){
    printf("value: %d", k[i]);
}

主な実行function_foo();

出力は1になりますか?行列 k の要素の初期化はありません。たぶん、メモリ内の int の長さを持つ何か?

私はCの概念、ポインター、その他すべてに不慣れです。

4

3 に答える 3

7

9 ではなく 8 つの要素しかないため、を評価するのは未定義の動作です。k[8]k

定義されていない行動の結果について議論してもほとんど意味がありません。なんでも起こる可能性がある。あなたのプログラムは整形式ではありません。

(これらはuninitializedk[0]であるため、 , ...,を評価することは未定義の動作でさえあることに注意してください。最初にそれらに書き込むか、 などの配列を初期化する必要があります。 )k[7]int k[8] = { 1, 2 };

于 2012-09-30T23:34:21.590 に答える
2

これは、宣言された配列の最後の要素の後のメモリ位置にある値です。

このコードを 1 週間後にもう一度実行すると、この時点でこの特定のメモリ アドレスに格納されている 42 またはその他の値になる可能性があります。また、この場合、セグメンテーション違反が発生する可能性があります。

于 2012-09-30T23:36:01.330 に答える
0

配列 k の範囲外に出ています。

k の最後の要素にアクセスするには、次を使用してみてくださいfunction_math(k, 7)

配列も初期化されないため、内部の値は未定義になります。

于 2012-09-30T23:35:31.893 に答える