2

その点の何が問題になっていますか。intへのポインタを指定して、そのintの値を0にしたかっただけです。

    int* p;int* q;

*p = 0; *q = 0;
cout<<"p = "<<*p<<" q = "<<*q<<endl;

これは迷惑です

作品:

int* p;
   *p = 0;

   cout<<*p<<endl;

クラッシュ:

     int* p;
   int* q;
   *p = 0;
   *q = 0;

   cout<<*p<<endl;
4

3 に答える 3

14
WORKS:

int* p;
*p = 0;

いいえ!動作しているように見えますが、実際には未定義の動作です。

宣言int* whatever;すると、初期化されていないポインタが残ります。逆参照することはできません。

ポインタを初期化し、ポインタが指す値を0に設定するには(あなたの場合):

int* p = new int(0);
于 2012-08-30T12:48:47.980 に答える
5

ポインタを使用するには、そのポインタが何かを指している必要があります。したがって、2つのステップがあります。ポインターを作成することと、ポインターが指すものを作成することです。

int *p, *q;    // create two pointers
int a;         // create something to point to
p = &a;        // make p point to a
*p = 0;        // set a to 0
q = new int;   // make q point to allocated memory
*q = 0;        // set allocated memory to 0
于 2012-08-30T12:59:22.540 に答える
2

ポインタにメモリを割り当てなかったため、未定義の動作が発生します。基本的に、それは何かが起こる可能性があることを意味します(それが機能する可能性も含みます)。

int something = new int(<initialization_value>);ポインタを初期化するために使用します。

于 2012-08-30T12:50:50.950 に答える