2009-08-19 6 views
1

私はポインタに関する明確化を探しています。私はbordland C++ 5.5.1で以下のコードを間違いなくコンパイルしました。しかし、私は実行しようとしている間、コアエラーを与える。C++プログラムの基本的なポインタの質問

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)を割り当てようとしました。これは、コンパイル時ではなく、除外時に私にエラーを与える。

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

第1更新:

ありがとうございます。最初に、私はC++の機能(参照変数)に取り組んでいることを理解しました。 第2に、ポインタ変数のためにメモリを割り当てる必要があります。

答えて

7

あなたが投稿したコードC++ではなく、Cである。そして、あなたの問題は、あなたが何かを指し、実際にこれらのポインタをする必要があるということです:あなたはDと2つのポインタ変数cを定義している

int * c = & x; // make c point at x 
* c = 42;  // changes x 
+0

したがって、「int &a=x;」の割り当てはCによってサポートされていません。 – chinnagaja

+0

"int&a = x"は参照を宣言しています - 参照はCではなくC++の一部です。 –

+0

ありがとうNeil、問題は、私はcppコンパイラを使用しており、デフォルトではファイルはcpp extentionコンパイル時に – chinnagaja

0

しかし、あなたはそうではありませんそれらのために任意のメモリを割り当てました。あなたは両方のメモリにいくつかのメモリを割り当てる必要があります。

この操作を行います。あなたはint型のポインタとしてCとDを宣言しているし、あなたが彼らの尖った値を更新しようとしている

int *c = &x; 
int *d = &y; 
2

を使用すると、有効なメモリでそれらを初期化することがないため、彼らはどこにでも有効を指していません。

try c =&x;それからcで遊ぶ。

2

無効なポインタを間接参照しています。 'c'と 'd'にはメモリ位置が割り当てられておらず、その位置として以前にメモリにあったものを使用します。あなたはする必要があります:

int *c = new int; 
int *d = new int; 
+2

またはいくつかの有効なメモリc =&x(xをxと同じメモリを指し示すように "int&a = x"がxと同じメモリを指すようにcを設定する) –

+1

このようにメモリを割り当てる場合は、あなたがそれらで済んだときに記憶をクリアすることを忘れないでください。使用:delete c;削除d; Cでこれを行う方法:int * c =(int *)malloc(sizeof(int));完了したら:無料(c); –

2

あなたは文法について完全にはっきりしていないようです。

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

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

あなたはポインタを宣言し、後の時点でオブジェクトを指すように設定したい場合は、あなたがこれを実行する必要があります。

int *c; 

// stuff goes here 

c = &x; 

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