1
#include <iostream>
using namespace std;

int main ()
{
    int **a;
    int b[5] = {3,4,5,6,1};
    *a=b;
    cout << *((*a)+0) << endl;
    return 0;
}

私の理解によると、*((*a)+0)と同等(*a)[0]です。私が間違っている?上記のコードで配列の最初の要素を出力するにはどうすればよいですか?

そして、なぜこのコードは機能するのでしょうか?

#include <iostream>
using namespace std;

int main ()
{
    int *a;
    int b[5] = {3,4,5,6,1};
    a=b;
    cout << *(a+0) << endl;
    return 0;
}

どこでも置き換えるa*a、なぜ間違っているのですか?

4

1 に答える 1

11

で初期化されていないポインタにアクセスします

*a=b;

この時点でランダムな場所を指し、未定義の動作aのルールと同様に、何が起こるか予測できません。あなたにとっては、書き込みできない場所のように思われるため、クラッシュが発生します。


2 番目のバリアントが機能するのは、 をaポイントするためbです。初期化されていないポインターに書き込むのではなく、実際には の最初のアイテムの場所でポインターを初期化bします。

于 2013-06-29T16:10:21.743 に答える