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

Определение размера массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шаблон как тип контейнера std::set http://www.cyberforum.ru/cpp-beginners/thread1224145.html
template<class T> int func(T&, int); typedef std::ostream_iterator<int> out_in; int main() { int xx{1, 2, 3, 4, 5, 6, 7, 7, 8, 2,234,234,2,34,23,423,3,242,42,342}; int size = func(xx, 20);...
C++ Успешное компилирование, но есть ошибки Такая проблема, что компилятор усердно продолжает кричать об ошибках, хотя программа нормально компилируется и запускается. Подскажите в чем проблема? Что и куда забыл добавить в ссылках на проект? ... http://www.cyberforum.ru/cpp-beginners/thread1224112.html
Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях C++
Есть массив: int main() { setlocale(LC_ALL,"RUSSIAN"); int array; int i, n, k, min, sumabs = 0, minabs = 0; printf_s("Введите количество элементов массива: "); scanf_s("%d", &n);
C++ Перевод числа из двоичной системы в десятичную или наоборот
Помогите написать прогу которая переводчит число из двоичной системы в десятичную или наоборот из десятичной в двоичную... Заранее спасибо!!
C++ Расставить знаки между числами от 1 до 9, чтобы получить заданное число http://www.cyberforum.ru/cpp-beginners/thread1224051.html
Доброе время суток. Помогите разобраться с задачей, пожалуйста. Нужно расставить знаки "+", "-" между числами от 1 до 9, расположенными в порядке возрастания так, чтобы в итоге получалось заданное...
C++ Умножение двух матриц Помогите пожалуйста подробнее

Показать сообщение отдельно
Убежденный
Системный программист
Эксперт С++
15682 / 7192 / 1136
Регистрация: 02.05.2013
Сообщений: 11,630
Записей в блоге: 1
Завершенные тесты: 1
08.07.2014, 21:47
Цитата Сообщение от TierX Посмотреть сообщение
Вопрос:
1) Как оно работает и как такое сделать для обычной функции.
Массивы вырождаются в указатели, это известная "фича" языков C и C++.

С++03:
4.2 Array-to-pointer conversion

1 An lvalue or rvalue of type “array of N T” or “array of unknown
bound of T” can be converted to an rvalue of type “pointer to T.”
The result is a pointer to the first element of the array.
Поэтому следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
template <typename T>
size_t size_of_array(T Arr[])
{
    return (sizeof (Arr) / sizeof (Arr[0]));
}
 
int main()
{
    int Array[] = {1, 2, 3, 4, 5, 6};
    std::cout << size_of_array(Array) << std::endl;
    return 0;
}
выдает вполне предсказуемый результат:
Кликните здесь для просмотра всего текста

> 1


Однако в том же стандарте сказано, что для ссылочных аргументов
шаблона никаких преобразований не выполняется:
14.3.2 Template non-type arguments

For a non-typetemplate-parameterof type reference to object, no conversions apply.
Поэтому вот такой код будет работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
template <typename T>
size_t size_of_array(T & Arr)
{
    return (sizeof (Arr) / sizeof (Arr[0]));
}
 
int main()
{
    int Array[] = {1, 2, 3, 4, 5, 6};
    std::cout << size_of_array(Array) << std::endl;
    return 0;
}
Вывод:
Кликните здесь для просмотра всего текста

> 6


Цитата Сообщение от TierX Посмотреть сообщение
Никак не получаеться передать неявное кол. элементов или весь масив в обычную функцию. Возможно ли это?
Только отдельным параметром. Иначе будет вырождение массива в указатель.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru