Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ssccsscc
0 / 0 / 0
Регистрация: 18.04.2015
Сообщений: 6
#1

Отличие способов передачи массива в функцию - C++

19.11.2016, 07:14. Просмотров 268. Ответов 8
Метки нет (Все метки)

В чем отличие:
double sum(double x[40])
от
double sum(double *x)
?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2016, 07:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Отличие способов передачи массива в функцию (C++):

Отличие передачи по ссылке от передачи указателя ?
Чем отличаюся следующие коды? class MyClass{ int val; public: int...

Отличие способов приведения
Есть ли отличия между (int) и static_cast<int>?

В чём отличие разных способов объявления переменных?
в чем отличие int a(2); от int a=2; И как писать правильней

Размер массива при передачи в функцию
День добрый, подскажите столкнулся с такой проблемой: void masssize (char...

Все способы передачи статического массива в функцию
Здравствуйте уважаемые форумчане. Предлагаю выложить сюда все способы передачи...

В чем ошибка при передачи статического массива в функцию
Не кидайте камни за использование глобальных переменных и статических двумерных...

8
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
19.11.2016, 07:53 #2
Одно и то же.
0
ssccsscc
0 / 0 / 0
Регистрация: 18.04.2015
Сообщений: 6
19.11.2016, 08:00  [ТС] #3
Оно способом работы тоже не отличается?
0
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
19.11.2016, 08:01 #4
Лучший ответ Сообщение было отмечено ssccsscc как решение

Решение

Я и говорю, что по "способу работы" - одно и то же. И массив, и указатель можно использовать в обоих случаях.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
19.11.2016, 08:08 #5
Лучший ответ Сообщение было отмечено ssccsscc как решение

Решение

ssccsscc, ничем не отличается. Синтаксис разный, смысл один и тот же: в функцию в качестве аргумента передаётся указатель на тип double. Единственное, что надо тут уточнить, так это то, что литерал 40 будет компилятором проигнорирован. Размер массива в функцию так не передать.
1
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4382 / 2357 / 655
Регистрация: 18.10.2014
Сообщений: 4,002
19.11.2016, 09:44 #6
Цитата Сообщение от ssccsscc Посмотреть сообщение
В чем отличие:
double sum(double x[40])
от
double sum(double *x)
В данном случае - ни в чем.

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

C++
1
2
3
4
5
6
7
class X;
 
void foo(X x[40]);  // Ошибка - нельзя использовать неполный тип в объявлении массива 
void foo(X *x);     // Все в порядке
 
void bar(int x[0]); // Ошибка - нельзя объявлять массива размера 0
void bar(int *x);   // Все в порядке
Добавлено через 2 минуты
---

Хм... GCC принимает первый вариант с X x[40]... Возможно я не прав.

А, вот оно что. Это в С запрещается использовать неполные типы в объявлениях параметров типа массив. В С++ это ограничение снято.
1
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
19.11.2016, 09:45 #7
Цитата Сообщение от ssccsscc Посмотреть сообщение
double sum(double x[40])
от
double sum(double *x)
В твоем случае этих параметров будет недостаточно, нужно еще в функцию посылать либо указатель на конец массива, либо кол-во элементов массива как 2ой параметр функции, чтобы функция не вышла за пределы
0
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
19.11.2016, 09:46 #8
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
В твоем случае этих параметров будет недостаточно
С чего ты это взял? Может у него размер массива в глобальной области видимости задан?
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
19.11.2016, 09:47 #9
Цитата Сообщение от gru74ik Посмотреть сообщение
С чего ты это взял?
прост)
0
19.11.2016, 09:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2016, 09:47
Привет! Вот еще темы с решениями:

Нюансы синтаксиса: наиболее правильный способ передачи массива в функцию
Подскажите, пожалуйста, что считается более комильфошным, правильным: объявить...

Функция поиска минимального и максимального элемента массива и их передачи в вызывающую функцию
Дана целочисленная матрица размера 6x9. Определить функцию поиска значения и...

Почему после передачи в функцию массива, выводятся случайные числа, если использовать *(uk++) во второй раз?
Интересует такой вопрос: почему после передачи в функцию массива выводятся...

Какими из приведенных способов можно задавать функцию main
1. void main(int argc, char* argv) 2. void main () 3. char* main ( int...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru