3

1)私が使用するポインタを初期化するには:

int number, *Pnumber;
    Pnumber=&number;
    number=10;

私はこれを正しく行っていますか?

どうですか:

int *Pnumber;
*Pnumber=10;

コンパイルすると、次のようになります。

RUN FAILED (終了値 1、合計時間: 858ms)

ところで。メモリを解放するために free(Pnumber) を使用する必要がありますか?

4

5 に答える 5

5

私はこれを正しく行っていますか?

はい、そうです。

どうですか:

  `int *Pnumber;  
   *Pnumber=10;`

Pnumber単一化されたポインターです。このポインターを逆参照すると、未定義の動作が発生します。Pnumber割り当てられたメモリ (変数または動的に割り当てられたメモリ領域) を指す必要があります。

ところで。メモリを解放するために free(Pnumber) を使用する必要がありますか?

を使用しない限り、使用mallocしないでくださいfree

于 2013-01-27T13:20:55.853 に答える
2

最初のバージョンでは、既に割り当てられているメモリへのポインター Pnumber を指すため、ポインターが指す値を変更できます。このバージョンは正しいです。2 番目のバージョンでは、ポインターが何を指すかを指定しない (初期化されていないままになる) ため、メモリーにアクセスしようとするとエラーが発生します。したがって、2 番目のバージョンは正しくありません。

于 2013-01-27T13:22:31.807 に答える
1

Pointer を使用する場合、「あなたがしたように変数を指します:

 int number, *Pnumber;
Pnumber=&number;
number=10;

ポインタの利点は、メモリをプログラムに保存できることです。そのため、32 ビットの整数である number の値を変更したい場合は、*Pnumber = 10; を使用できます。ここでは整数を使用していますが、それらの配列を使用するか、double または float を使用すると大量のメモリが使用されるため、変数のアドレスを 32 ビット OS アーキテクチャで 32 ビットに保存する方が良い理由は、常にポインターを使用しないことです。指しているタイプは関係ありません

于 2013-01-27T13:26:28.170 に答える
1

あなたの最初のアプローチは正しいです。

しかし、これは間違っています:

int *Pnumber;
*Pnumber=10;

最初のアプローチではポインタが有効なメモリを指していないためです。

于 2013-01-27T13:20:23.050 に答える
1

最初の方が正しい

2番目に、メモリ空間へのポインターを指していません。

ポインタはアドレスなので

私たちが持っている場合

int *p;

つまり、p はアドレスです

*p はメモリアドレスの内容です。

そのため、メモリをいっぱいにする前に、ポインタがメモリ空間を指す必要があります

*p = 5;
于 2013-01-27T13:20:38.343 に答える