2

コードを作りました

#include <iostream>
#include<conio.h>
using namespace std;

void main()
{
    int *x,*y;
    x=new int[1];
    y=new int;
    cin>>y;   //Gives error probably because y is a pointer and not a variable
    cin>>*y                 //works fine
    cin>>x[0]>>x[1];
    cout<<x[0]<<x[1];
    cout<<*x[0];         //gives error
    cout<<y;
    cout<<*y;

    getch();

}

エラーが発生します.なぜですか?xをポインター配列として宣言したことを覚えていますが、* yで行ったのと同じことを行っています.ポインター配列が変数になることを意味しますか?plz help!

4

3 に答える 3

1

配列の意味:

x[0]

*(x + 0);と同等です。

ご存知のように、配列はそのルートのポインタに他なりません。

したがって、x[a]またはx[a] [b]を持つ配列は、次のように展開できます。

*(x+a) or *(*(x+a)+b)

これに基づいて、私はあなたがあなたの答えを見つけたことを望みます。

于 2013-03-21T04:58:42.567 に答える
1

xはintへのポインタです。単一のint長であるintの配列を割り当てました。したがって、x [0]はintであり、*xはintです。ただし、* x [0]は、x[0]が間接参照しているポインターであることを意味します。ただし、これはポインタではなく、intです。そのため、エラーが発生します。

于 2013-03-21T04:54:59.923 に答える
1

そのコード行で実際に行っていることは、次のようになります。

cout<<**x;

を使用すると、の要素x[0]が逆参照されるためです。0thx

の定義からわかるようにxxは単なるポインタであり、ポインタへのポインタではありません。したがって、変数を逆参照しようとしているため、2回逆参照しても機能しません。

何の行:

x=new int[1];

実際に行っているのは、「このポインタにサイズ1のintの配列を割り当てる」と言っているだけです。これは、x1つのintを格納するのに十分な大きさのメモリブロックを指すだけです。

于 2013-03-21T04:55:34.350 に答える