Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2014, 09:57   #1
borodadada
 
Регистрация: 16.10.2013
Сообщений: 3
По умолчанию Размер массива из другой функции

Не могу понять, почему не получается получить размер массива из другой функции. Если размер считать из той функции где создается массив, всё получается.
Код:
int arraysize (int& a); // прототип функции
 
int main()
{
    int foo [3] = {111,222,333};
 
 
    cout << arraysize(*foo) << endl;
    
    _getch(); //пауза
    return 0;
}
 
int arraysize(int& a) 
{
    int* foo=&a;
    return sizeof(foo)/sizeof(foo[0]);  
 
}

Последний раз редактировалось Stilet; 03.06.2014 в 10:40.
borodadada вне форума Ответить с цитированием
Старый 03.06.2014, 10:28   #2
casekey
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 95
По умолчанию

Потому что для этой функции, "a" - это не массив а просто ссылка на int.
casekey вне форума Ответить с цитированием
Старый 03.06.2014, 10:46   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Не могу понять, почему не получается получить размер массива из другой функции.
В С++, невозможно определить hfpvth массива, из параметрам самого массива. Эта задача, лежит на самом программисте. Поэтому, наряду с самим массивом, нужно передавать и его образующие например:
Код:
void mayFunction(double & array, int N, int M){}
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 03.06.2014, 11:15   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
В С++, невозможно определить hfpvth массива, из параметрам самого массива. Эта задача, лежит на самом программисте. Поэтому, наряду с самим массивом, нужно передавать и его образующие например:
Код:
void mayFunction(double & array, int N, int M){}
Все там возможно:

пример-иллюстрация синтаксиса для работы с массивами на языке с++
http://rextester.com/TZHHFO18888


Код:
#include <iostream>
using namespace std;

//функция демонстрирует, как передать ссылку на массив в функцию
//сохраняя данные о размерности массива
template<class T, size_t N>void PrintArray(T (&arr)[N])    
{
    for(const auto& i: arr)
        cout <<"value = "<<i<<endl;
}


//функция демонстрирует синтаксис, как вернуть ссылку на массив из функции
//при этом размерность массива будет сохранена
template<class T, size_t N>T (&GetArray())[N]
{
    static T array[N];
    return array;
    
}


//функция демонстрирует, как получить ссылку на массив через аргумент функции
//и вернуть ссылку на него
template<class T, size_t N> T (& FunctionName(  T (&arr)[N] )   )[N]
{
    static T array[N];
    
    for(size_t i=0;i<N;++i ) 
        array[i]= arr[i]*2; 
    
    return array; 
}




int main()
{
    std::cout << "Hello, world!\n";
    cout<<"---------\n";
    
    auto& array = GetArray<int,5>(); //<---- получаем массив по ссылке с сохранением размерности
    
    size_t n=0;
    for(auto& i: array) //<---- заполняем чем то 
        i=n, ++n;
    
    PrintArray(array); //<--- показываем
    
    auto& array1 = FunctionName(array);  //<--- передаем массив по ссылке в функцию
                                         // получая другой массив по ссылке. Такой же как первый, но все значения в 2 раза больше
    cout<<"---------\n"; 
    PrintArray(array1);
}
На языке си нет никаких ссылок, поэтому там приходится все передавать через указатель, и дополнительно передавать размер.

Но не нужно путать с++ и си.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как обратиться из функции к другой функции Arassir JavaScript, Ajax 2 24.02.2012 21:31
Размер массива BaronVik C# (си шарп) 1 05.01.2012 10:08
Передача функции другой функции как аргумента C # stopanko C# (си шарп) 2 20.11.2011 13:13
Размер массива huzik Общие вопросы C/C++ 10 15.10.2009 18:15
размер массива nosuchathing Общие вопросы C/C++ 6 15.01.2009 11:40