0

コードは次のとおりです。

int *num_arr = number_to_array(num);
cout<<"\nNum aaray:"<<*(num_arr+1);
display(num_arr, digit_count);

ここの cout ステートメントは正しい値を示していますが、display() はそうではありません。ディスプレイにガベージ値が表示されている

display() のコード:

void display(int num_arr[],int dc)
{
cout<<"\n";
cout<<"\n"<<num_arr[0];
cout<<"\n"<<num_arr[1];
 for(int i = (dc-1); i>=0; i--)
 {
         cout<<num_arr[i];
 }

}

int* number_to_array(int num)
{
int i=0;
int num_arr[100]; // make dynamic array
  while(num!=0)
  {
    num_arr[i] = num%10;
    num  = num/10;                
    i++;
   }
return num_arr;
}

何が理由でしょうか?

4

1 に答える 1

2
  1. ローカル変数のアドレスを返しています(配列の名前は最初の要素のアドレスです)。関数を終了すると配列が存在しないため、これは誤りです。

  2. int num_arr[100]; // make dynamic array- 動的配列ではなく、静的配列です。

可能な解決策:

  • (望ましい) 使用std::vector
  • 動的配列を使用する ( int *p = new int[100])

提案 - C/C++ の基本を学びます: ポインター、配列、関数の引数、および戻り値。

于 2013-07-11T09:29:01.747 に答える