2

cで印刷配列関数を書きたいと思います。参照を介して ac 関数に配列を渡すと、最初の要素へのポインターが渡されます。このポインターをインクリメントして配列を反復処理できると想定していますが、プログラムは単にセグメンテーション違反を起こします。

まず、私のプログラムがセグ フォールトを起こしている理由と、このような関数を c. 事前に感謝します。

void print_array(int *array, int length) {
    int i = 0; 
    for (i = 0; i < length; array++) {
        printf("%d\n", *array);
    }
}

int main (int argc, int *argv[]) {
    int test[10] = {0};
    print_array(test, 10);
}
4

2 に答える 2

4

iini < lengthは決して変わらないため、ループは無限です。その条件は常に true と評価されます。その結果、ループの終わりを飛び越えています。ループを次のように変更することをお勧めします。

for (i = 0; i < length; i++) {
    printf("%d\n", array[i]);
}

... または、 を使用する場合はarray++、条件を変更します。

for (int *end = array + length; array < end; array++) {
    printf("%d\n", *array);
}
于 2013-04-06T03:28:46.830 に答える
0

これを試して:

void print_array(int *array, int length) {
    int i = 0; 
    for (i = 0; i < length; i++) {
        printf("%d\n", array[i]);
    }
}

あなたのループ制御変数は(ループ状態にある)のでi、無限ループを避けるためにそれをインクリメントする必要があります。また、[]表記法を使用すると、ポインターを手動でインクリメントするよりも、あなたのレベルの誰かにとってはるかに簡単に把握できます。

于 2013-04-06T03:28:07.733 に答える