Форум программистов, компьютерный форум CyberForum.ru

Передать ссылку на массив из одной функции во вторую - C++

Восстановить пароль Регистрация
 
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81
14.05.2014, 03:26     Передать ссылку на массив из одной функции во вторую #1
Как передать ссылку на массив из одной функции во вторую, если в первый мы его инициализируем, а во второй заполняем?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <iomanip>
#include  <math.h>
using namespace std;
 
double vvod(int n,int m,int a,int b)
{
    double **G,*B,*C,*P,*nev;
    C=new double[n];
    B=new double[n];
    P=new double[21];
    nev=new double[21];
    
     G = new double*[n];
    for (int i=0; i<n; i++)
        G[i]= new double[n];
    
    double *x_i = new double[m];
    double *x_j = new double[m];
    double *y_i = new double[m];
    double *y_j = new double[m];
}
double x_y(double *x_i, double *x_j,double *y_i,double *y_j,int m, int a,int b)
{
        for(int i=1; i<=m; i++)
        {
        x_i[i-1]=a+(i-1)*(b-a)/(m-1);
        y_i[i]=pow(sin(x_i[i]),2)-3*cos(x_i[i]);
        }
    for (int j=0; j<21; j++)
        {
        x_j[j-1]=a+(j-1)*(b-a)/20;
        y_j[j]=pow(sin(x_j[j]),2)-3*cos(x_j[j]);
        }
        return *x_i,*x_j,*y_i,*y_j;
}
main()
{   
    setlocale(LC_ALL, "Russian");
    int n,m,a,b;
    cout << "×èñëî Г*åèçâåñòГ*ûõ=";
    cin >> n;
    cout << "\n ×èñëî óçëîâ=";
    cin >> m;
    cout << "ГЌГ*Г·Г*ëî ГЁ ГЄГ®Г*ГҐГ¶ ГЁГ*òåðâГ*Г«Г*";
    cin >> a >> b;
    vvod(n,m,a,b);
 
 
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S_el
1906 / 1501 / 295
Регистрация: 15.12.2013
Сообщений: 5,911
14.05.2014, 08:18     Передать ссылку на массив из одной функции во вторую #2
andryshka, массивы всегда по ссылке передаются.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
 
void my_func(double *arr,int size);
void main()
{
int i,j,n;
cout<<"vvedute razmer massuva:"<<endl;
cin>>n;
double *arr=new double[n];
 
my_func(arr,n);
for(j=0;j<n;j++)
cout<<arr[j]<<" ";
}
 
void my_func(double *arr,int size)
{
for(int i=0;i<size;i++)
arr[i]=2*i; 
}
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
14.05.2014, 08:21     Передать ссылку на массив из одной функции во вторую #3
Цитата Сообщение от S_el Посмотреть сообщение
массивы всегда по ссылке передаются.
Передается указатель на первый элемент массива, а не ссылка.
S_el
1906 / 1501 / 295
Регистрация: 15.12.2013
Сообщений: 5,911
14.05.2014, 08:24     Передать ссылку на массив из одной функции во вторую #4
Цитата Сообщение от zss Посмотреть сообщение
Передается указатель на первый элемент массива, а не ссылка.
Верное замечание.
Кстати,поправьте если ошибаюсь,ссылка это замаскированный указатель?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
14.05.2014, 20:04     Передать ссылку на массив из одной функции во вторую #5
andryshka, Посмотрел код... мурашки по коже... У тебя память течет как река в океан.

А массив заполнить так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
template<typename T, int N>
T (&fill(T (&array)[N], T value))[N] {
    for (int i = 0; i < N; ++i)
        array[i] = value;
    return array;
}
     
 
int main(int argc, char **argv) {
    int a[5];
    for (auto e: fill(a, 4)) 
        std::cout << e << ' ';
    std::cout << std::endl;
}
Только это только для массивов а не для указателей. Если передашь вместо массива указатель на массив компилятор не сможет узнать размер массива. Для динамических массивов... я обхожусь указателями...
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81
14.05.2014, 21:31  [ТС]     Передать ссылку на массив из одной функции во вторую #6
Цитата Сообщение от outoftime Посмотреть сообщение
А массив заполнить так
Я слишком туп...Что есть value?
C++
1
template<typename T, int N>
это шаблон?Я с ними раньше не сталкивался, поправьте и дополните, если, что не верно скажу?Но как я понял мы передаём в шаблон длину массива и тип Т, но я не понимаю, что есть typename он объявляет тип данных?Каким образом он его представляет(это же не вещественный или целочисленый тип)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2014, 23:23     Передать ссылку на массив из одной функции во вторую
Еще ссылки по теме:

C++ Как передать массив из одной функции в другую?
C++ Как передать значение из одной функции в другую?
Передать значение из одной функции в другую функцию в связном списке C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
14.05.2014, 23:23     Передать ссылку на массив из одной функции во вторую #7
Цитата Сообщение от andryshka Посмотреть сообщение
Я с ними раньше не сталкивался
Самое время почитать литературу, ну или погуглить на крайняк.

Цитата Сообщение от andryshka Посмотреть сообщение
Что есть value?
Идентификатор имени переменной написанный на английском языке.

В двух словах, шаблон надо просто для того что-бы была возможность работать с массивами типа
C++
1
const int array[]
В отличии от обычного указателя
C++
1
const int *array
Первый вариант неявно содержит в себе информацию о размере массива и что-бы узнать с массивом какого размера прибегают к использованию шаблона
C++
1
2
3
4
5
template<int N>
void something(int (&array)[N]);
// main
int a[5];
something(a); // размер не указывается но за счет шаблона он известен
Такая же конструкция используется для возвращения массива определенной длины
C++
1
2
template<int N>
int   (&   something(int (&array)[N])   )[N];
Я выделил составляющие 3мя пробелами.
Yandex
Объявления
14.05.2014, 23:23     Передать ссылку на массив из одной функции во вторую
Ответ Создать тему
Опции темы

Текущее время: 09:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru