2016-03-31 8 views
1
#include <iostream> 
#include <vector> 

void init() 
{  
    std::vector<double> b; 
    b.push_back(10); 
    return; 
} 

double mean(double *array, size_t n) 
{ 
    double m=0; 
    for(size_t i=0; i<n; ++i) 
    { 
     m += array[i]; 
    } 
    std::cout<<*array<<std::endl; 
    return m/n; 
} 

int test(int *b) 
{ 
    int dist; 
    dist=b[0]; 
    return dist; 
} 

int main() 
{ 
    int x=0; 
    int y=0; 
    //double a[5]={1, 2, 3, 4, 5}; 
    std::vector<double> a; 
    a.push_back(1); 
    a.push_back(2); 
    a.push_back(3); 
    a.push_back(4); 
    a.push_back(5); 
    std::cout<<mean(&a[0], 5)<<std::endl; // will print 3 
    init(); 
    y=test(&b[0]); 
    std::cout<<y<<std::endl; 
    return 0; 
} 

Я пытаюсь проверить, могу ли я инициализировать вектор «b» в функции «init» и получить значение в «тестовой» функции, чтобы окончательно вернуться как «y» в главную функцию. Возможно ли это? Это просто тестовый код, чтобы изучить эту возможность.Передача вектора по ссылке

+3

Трудно понять, с чего начать, почему 'main' объявлен как' int main (int * b) '? Что вы ожидаете от 'b' здесь? 'main' либо не имеет аргументов, либо ровно два,' int' и 'char *'. – user657267

+0

'b' в init() больше не существует после завершения init(). Он также не имеет никакого отношения к 'b' в' main() 'или' b' в 'test()'. – drescherjm

+0

Я вижу, поэтому я должен вернуть «b» в основную функцию как «return = init()». Мой вопрос: Какова роль init() в основной функции в ее текущей форме? – Far

ответ

2

Может быть, вы хотите:

std::vector<double> init() 
{  
    std::vector<double> b; 
    b.push_back(10); 
    return b; 
} 

, а затем в основной:

auto b = init(); 
y = test(&b.at(0)); 

При вызове mean. получить размер как a.size() вместо hardcoding 5. И пройти a.data() вместо &a[0], то он не будет разбиваться, если вектор пуст.

+0

Полезные советы! Я изменил свой код выше, чтобы отразить рекомендованные улучшения. – Far

+0

@Far было бы лучше оставить текст вопроса без изменений, в противном случае он смущает новых читателей. (Отредактируйте сообщение и используйте функцию отката). Вы можете принять этот ответ, если он отвечает на ваш вопрос, или вы можете отредактировать или прокомментировать, чтобы уточнить свое намерение. –

+0

Я отбросил изменения. – Far

Смежные вопросы