1)私が使用するポインタを初期化するには:
int number, *Pnumber;
Pnumber=&number;
number=10;
私はこれを正しく行っていますか?
どうですか:
int *Pnumber;
*Pnumber=10;
コンパイルすると、次のようになります。
RUN FAILED (終了値 1、合計時間: 858ms)
ところで。メモリを解放するために free(Pnumber) を使用する必要がありますか?
1)私が使用するポインタを初期化するには:
int number, *Pnumber;
Pnumber=&number;
number=10;
私はこれを正しく行っていますか?
どうですか:
int *Pnumber;
*Pnumber=10;
コンパイルすると、次のようになります。
RUN FAILED (終了値 1、合計時間: 858ms)
ところで。メモリを解放するために free(Pnumber) を使用する必要がありますか?
私はこれを正しく行っていますか?
はい、そうです。
どうですか:
`int *Pnumber;
*Pnumber=10;`
Pnumber
単一化されたポインターです。このポインターを逆参照すると、未定義の動作が発生します。Pnumber
割り当てられたメモリ (変数または動的に割り当てられたメモリ領域) を指す必要があります。
ところで。メモリを解放するために free(Pnumber) を使用する必要がありますか?
を使用しない限り、使用malloc
しないでくださいfree
。
最初のバージョンでは、既に割り当てられているメモリへのポインター Pnumber を指すため、ポインターが指す値を変更できます。このバージョンは正しいです。2 番目のバージョンでは、ポインターが何を指すかを指定しない (初期化されていないままになる) ため、メモリーにアクセスしようとするとエラーが発生します。したがって、2 番目のバージョンは正しくありません。
Pointer を使用する場合、「あなたがしたように変数を指します:
int number, *Pnumber;
Pnumber=&number;
number=10;
ポインタの利点は、メモリをプログラムに保存できることです。そのため、32 ビットの整数である number の値を変更したい場合は、*Pnumber = 10; を使用できます。ここでは整数を使用していますが、それらの配列を使用するか、double または float を使用すると大量のメモリが使用されるため、変数のアドレスを 32 ビット OS アーキテクチャで 32 ビットに保存する方が良い理由は、常にポインターを使用しないことです。指しているタイプは関係ありません
あなたの最初のアプローチは正しいです。
しかし、これは間違っています:
int *Pnumber;
*Pnumber=10;
最初のアプローチではポインタが有効なメモリを指していないためです。
最初の方が正しい
2番目に、メモリ空間へのポインターを指していません。
ポインタはアドレスなので
私たちが持っている場合
int *p;
つまり、p はアドレスです
*p はメモリアドレスの内容です。
そのため、メモリをいっぱいにする前に、ポインタがメモリ空間を指す必要があります
*p = 5;