2013-07-11 29 views
0

下面的代码:数组作为arguement传递到显示垃圾的功能值

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

的COUT语句这里显示正确的值,但显示()不是。显示器正在示出无用值用于显示)

代码(:

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; 
} 

可能是什么原因?

+2

你可以发布display()函数吗? – Ermir

+3

[C++函数返回指针]可能的重复(http://stackoverflow.com/questions/8969292/returning-pointer-from-a-function-in-c) – Mat

回答

2
  1. 您正在返回本地变量的地址(数组的名称是它的第一个元素的地址)。这是错误的,因为退出函数后数组不会存在。它是静态数组,不是动态的。

可能的解决方案:

  • (Prefferable)使用std::vector
  • 使用动态数组(int *p = new int[100]

提案 - 学习C/C++基础:指针,数组功能参数和返回值。

+0

但为什么呼叫后的cout语句使数组函数显示正确的值? – user1995120

+0

这只是运气,记忆中的价值没有被另一个变量覆盖。 –

+0

@ user1995120因为没有人覆盖它 - 但它可以发生在每毫秒 –