2015-07-27 2 views
-3

Я только начал изучать C++ и пришел к Arrays. Поэтому я хочу выполнить некоторую функцию в массиве, которая была передана в function. Так для этого я попробовал небольшой примерC++ array дает мне значение для мусора

#include <iostream> 
using namespace std; 

void printArray(int data[]){ 
    cout<<"len is :"<< sizeof(data)<<endl; 
    for(int i = 0 ;i<sizeof(data); i++){ 
    cout<<data[i]<<" "; 
    } 
    cout<<endl; 
} 

int main() { 
    int data[] = {1,2,3,4,5,6}; 
    printArray(data); 
    cout<<"in main :"<<sizeof(data)<<endl; 
    for(int i = 0 ;i<sizeof(data); i++){ 
     cout<<data[i]<<" "; 
    } 
    return 0; 
} 

И Ниже выход я получил из кода

len is :8 
1 2 3 4 5 6 738192384 -1126994503 
in main :24 
1 2 3 4 5 6 738192384 -1126994503 0 0 -1061892411 32677 0 0 -1665163256 32766 0 1 4196851 0 0 0 463403231 1946389667 

Я не понимаю где процесс идет не так. или что-то в моем коде, чтобы эти странные изменения произошли. а также sizeof() дает два значения для одного и того же массива. Исправьте меня, где я где-то не прав.

Я использую программное обеспечение Eclipse с добавленным плагином C++.

Заранее благодарим за помощь!

+0

'SizeOf (данные)' не делать то, что вы думаете, что он делает. Вам нужно передать фактический размер массива функции в качестве параметра, нет другого способа сделать это. –

+0

Также см. Http://stackoverflow.com/questions/1328223/sizeof-array-passed-as-parameter –

+1

Если вы только начали изучать C++, я бы посоветовал вам читать на векторах и использовать их вместо массивов. – dhavenith

ответ

2

sizeof не работает, если вы передаете массив функции таким образом. Попробуйте передать размер с помощью массива или передать начальные и конечные указатели массива.

Если вы не возражаете, шаблоны, вы можете передать массив по ссылке:

template<unsigned length> 
void printArray(int (&data)[length]) { 
    //length is the length of data 
} 
Смежные вопросы