1

ポインタに関する説明を探しています。次のコードを bordland c++ 5.5.1 でエラーなしでコンパイルしました。しかし、実行しようとするとコアエラーが発生します。

int main ()
{
    int x=10,y=20;

     int &a=x;
     int &b=y;

     int *c;
     int *d;

     *c=x;
     *d=y;

return 0;
}

基本的に、2 つの参照変数 (a、b) を作成し、2 つの変数 (x、y) を割り当てようとしています。その後、2 つのポインター変数 (c、d) を作成し、同じ変数 (x、y) を割り当てようとしました。これにより、コンパイル時ではなく、実行中にエラーが発生します。

私が間違っているかどうかにかかわらず、これはポインター変数の標準的な割り当てではありません。この時点でポインターの割り当てが失敗する理由。これを理解するのを手伝ってください。

最初の更新:

ありがとうございます。まず、C++ 機能 (参照変数) に取り組んでいることを理解しました。次に、ポインター変数を操作する前に、ポインター変数にメモリを割り当てる必要があります。

4

5 に答える 5

7

投稿したコードは C ではなく C++ です。問題は、これらのポインターが実際に何かを指すようにする必要があることです。

int * c = & x;   // make c point at x
* c = 42;        // changes x
于 2009-08-19T10:51:50.563 に答える
2

c と d を int ポインターとして宣言し、それらのポイントされた値を更新しようとしています。有効なメモリで初期化しないため、有効な場所を指していません。

c = &x; を試してください。そしてcで遊んでください。

于 2009-08-19T10:52:06.460 に答える
2

無効なポインターを逆参照しています。'c' と 'd' にはメモリ ロケーションが割り当てられていないため、以前にメモリ内にあったものをロケーションとして使用します。あなたがする必要があります:

int *c = new int;
int *d = new int;
于 2009-08-19T10:52:40.327 に答える
2

構文が完全に明確ではないように見えます。

int *cという名前の整数を宣言しているように見えるため、入力は難しいです*c。しかし、そうではありません。これは整数へのポインターを宣言します。C/C++ では、特定の型へのポインターは*、型名の後に a を追加することで示されます。したがって、スペーシングによって見た目が異なりますが、タイプint*(整数へのポインター)の変数を という名前で宣言しています。c記録としては、入力int* cしても同じ結果が得られ、おそらくより読みやすくなります。

したがって、実際には と呼ばれているため、入力*cしても変数は参照されませんc。代わりに、これはポインターを逆参照します。ポインターが指しているオブジェクトを返します。または、ポインターが無効な場合は、エラーが発生します。

ポインターを宣言し、後でオブジェクトを指すように設定する場合は、次のようにする必要があります。

int *c;

// stuff goes here

c = &x;

&xは、メモリ内の のアドレスを返しxます。これは、ポインターに値として割り当てることができます。次に、ポインターを逆参照することにより、ポインターを介して値を操作できます*c = 15

于 2009-08-19T11:13:01.470 に答える
0

2 つのポインタ変数 c と d を定義しましたが、それらにメモリを割り当てていません。両方にメモリを割り当てる必要があります。

これを行う:

int *c = &x;
int *d = &y;
于 2009-08-19T10:52:01.000 に答える