Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вывод на монитор значения вектора через функцию


Автор: Ukrajinec 23.12.2014, 22:03
Нужно вывести на монитор значение вектора, который заполняется функцией №1, с помощью функции №2. 
Код

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;

const vector<int>* penta(int fin = 1);
void display_vector(const vector<int> vec);

int _tmain(int argc, _TCHAR* argv[])
{
    int i = 0;
    cout << "Enter number of elements:";
    cin >> i;
    const vector<int> *a = penta(i);
    if (!a)
        cerr << "Pointer A is annulled.";
    cout << "Penta = " << penta(i) << "\n";
    cout << "A = " << a << "\n";
    display_vector(*a);
    return 0;
}

const vector<int>* penta(int fin)
{
    int max_size = 1024;
    if (fin <= 0 || fin > max_size)
    {
        cerr << "Wrong number of elements. The number of elements is set to 8.\n";
        fin = 8;
    }
    static vector<int> elem(fin);
    for (int i = 0; i < fin; i++)
        elem[i] = i*((3 * i - 1) / 2);
    cout << "Elem = " << &elem << "\n";
    return &elem;
}
void display_vector(const vector<int> vec)
{

    for( int i = 0; i < vec.size(); i++)
    {        
        cout << "V[" << i << "]= " <<  vec[i] << "\n";
    }
    cout << "Vec = " << &vec;
}

Программа работает. Меня интересует, возможно ли функции display_vector дать адрес заполненного вектора, чтоб потом его вывести на монитор? Если да то как, потому что у меня это не получается (

Автор: VSB 24.12.2014, 10:43
Передавайте по ссылке

void display_vector(const vector<int>& vec)

Автор: Ukrajinec 24.12.2014, 11:40
Цитата(VSB @  24.12.2014,  09:43 Найти цитируемый пост)
Передавайте по ссылке

void display_vector(const vector<int>& vec) 

Так пробовал, тогда в строчке
Код

display_vector(a);

ругается на указатель "а" Error: не существует подходящего конструктора для преобразования из "const std::vector<int, std::allocator<int>>* в ""std::vector<int, std::allocator<int>>* "


Автор: baldina 24.12.2014, 12:09
Код

display_vector(*a);

Автор: Ukrajinec 24.12.2014, 18:24
Цитата(baldina @  24.12.2014,  11:09 Найти цитируемый пост)
:
display_vector(*a);

хм.. работает)) а я думал что если функция должна получить адрес, то как аргумент туда и надо писать адрес, а не сам указатель из которого функция сама достанет то что ей надо) спасибо

Автор: konshyn 24.12.2014, 19:20
Цитата(Ukrajinec @  24.12.2014,  18:24 Найти цитируемый пост)
хм.. работает)) а я думал что если функция должна получить адрес, то как аргумент туда и надо писать адрес, а не сам указатель из которого функция сама достанет то что ей надо) спасибо 

В языке С++ есть указатели и ссылки - это разные сущности.
Когда объявляешь указатель, то это переменная в памяти, которая хранит адрес на какой объект.
А когда объявляешь ссылку на переменную, то это просто псевдоним для этого объекта. 
например:
Код

int a = 10;
int &b = a;

здесь а - переменная, которая хранит значение 10 в своей памяти. А b - это ссылка, т.е. псевдоним, другое имя и т.п. сущности, и память для b не выделяется, просто компилятр ставит b в соответствие a.

Добавлено через 7 минут и 15 секунд
Указатель на ссылку нельзя создать, а ссылку на указатель можно.

Автор: baldina 24.12.2014, 21:02
Цитата(Ukrajinec @  24.12.2014,  18:24 Найти цитируемый пост)
 надо писать адрес, а не сам указатель

указатель как раз хранит адрес
Код

int a=10; // a - переменная целого типа, имеет значение 10
int  *p=&a; // p - указатель на переменную целого типа, имеет значение адреса переменной a
int b = *p; // передаем в b значение по адресу p
void foo(int*); // foo - функция, принимающая в качестве аргумента указатель (адрес)
foo(&a); // ok
foo(p); // ok

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)