0

私はCPPの初心者です。奇妙な結果をもたらしている組み合わせを使用しようとしてpointerいます。cin

int *array;
int numOfElem = 0;
cout << "\nEnter number of  elements in array : ";  
cin  >> numOfElem;
array = new (nothrow)int[numOfElem];

if(array != 0)
{
    for(int index = 0; index < numOfElem; index++)
    {
        cout << "\nEnter " << index << " value";
        cin >> *array++;
    }

    cout << "\n values are : " ;
    for(int index = 0; index < numOfElem; index++)
    {
        cout << *(array+index) << ",";
    }
}else
{
    cout << "Memory cant be allocated :(";
}

アウトプットは

ここに画像の説明を入力

私のコードの問題は何ですか?

よろしく、
シャ

4

2 に答える 2

3

ループのarray++内側ではポインターがインクリメントされるため、最初のループが完了するarrayまでに、最初に割り当てられた配列の外側を指します。

やるだけ

cin >> *(array+index);

または単に

cin >> array[index];
于 2013-02-17T10:13:15.987 に答える
1

array最初のループでポインター を進めています。

for(int index = 0; index < numOfElem; index++)
{
    cout << "\nEnter " << index << " value";
    cin >> *array++;
}

そして、2 番目のループで元の変更されていないポインターを使用しているふりをします。

cout << "\n values are : " ;
for(int index = 0; index < numOfElem; index++)
{
    cout << *(array+index) << ",";
}
于 2013-02-17T10:13:35.333 に答える