Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 02.05.2017
Сообщений: 92

Что делает & в параметрах функции?

29.11.2017, 14:46. Показов 11606. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне в учебнике попался пример с функцией вычисляющей площадь и периметр треугольника. В ней переменные периметра и площади прописаны в параметрах функции и там же объявлены.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <math.h>
int Triangle(float a, float b, float c, float &p, float &s)
{
// функция имеет два варианта выхода
// параметры a, b, c передаются по значению
// (только входные данные),
// параметры p, s, по ссылке
// (как входные данные, так и результат)
float pp; // полупериметр
if(a+b<=c||a+c<=b||b+c<=a) // треугольник не существует
     return 0;
else
{* // треугольник существует
     p=a+b+с;
     pp=0.5*p;
     s=sqrt(pp*(pp–a)*(pp–b)*(pp–c));
     return 1;
}
}
Я попытался изменить функцию так чтобы результаты расчётов она стала выводить в консоль программа поделена на 2 файла Заголовочный Header1.h который я вызываю через #include в файле с исходным кодом Source.spp
Header.h
C
1
2
3
4
5
6
7
8
9
10
11
12
void Triangle(float a, float b, float c, float &p, float &s)
{
    float pp;
    if (a + b <= c || a + c <= b || b + c <= a)
        printf("Не существует");
    else
    {
        p = a + b + c;
        pp = 0.5*p;
        s = sqrt(pp*(pp - a)*(pp - b)*(pp - c));
    }
}
Source.spp
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include "Header.h"
 
int Triangle(float a, float b, float c, float &p, float &s);
void main(void) {
    printf(Triangle(1, 2, 3, float &p, float &s));
}
Но в итоге программа не запускается из-за двух переменных с & в параметрах функции. Я их оттуда удалил и объявил в самой функции вот так
Header.h
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Triangle(float a, float b, float c)
{
    float pp;
    float p;
    float s;
    if (a + b <= c || a + c <= b || b + c <= a)
        printf("Не существует");
    else
    {
        p = a + b + c;
        pp = 0.5*p;
        s = sqrt(pp*(pp - a)*(pp - b)*(pp - c));
        printf("%f, %f\n",p, s);
    }
}
Source.cpp
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <Windows.h>
#include "Header.h"
 
void Triangle(float a, float b, float c);
void main(void) {
    Triangle(1, 2, 2);
    system("pause");
}
И всё заработало. Вопрос что это за & и для чего в учебнике его добавили? Я его пробовал гуглить в Инете инфы не нашёл, пробовал менять типы функции с Void на Int тоже ничего не дало. Я не вижу взаимосвязи. Программирую на Visual Studio.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2017, 14:46
Ответы с готовыми решениями:

Что значит & и * в параметрах функции?
Задача 1. Напишите функцию f(double&amp; a, double&amp; b, double c, double q), которая возвращает катеты прямоугольного треугольника, гипотенуза...

Что делает эта строчка: ++x &amp;&amp; ++y || ++z; ?
Что делает эта строчка? ++x &amp;&amp; ++y || ++z;

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume WHERE ' &amp; ''' &amp;...

22
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,090
01.12.2017, 22:55
Студворк — интернет-сервис помощи студентам
Ради интереса проверил. Действительно, работа со статическим массивом размером 1 ГБ прошла успешно. Поскольку размер стека 8 МБ, очевидно что массив расположен не на стеке.
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
02.12.2017, 05:50
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ради интереса проверил. Действительно, работа со статическим массивом размером 1 ГБ прошла успешно. Поскольку размер стека 8 МБ, очевидно что массив расположен не на стеке.
А как вы это проверили?
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,090
02.12.2017, 09:22
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
char arr[1024*1024*1024];
 
int main(){
  int i;
  for(i=0; i<sizeof(arr); i++)arr[i] = i*2; //чтобы гарантировать что массив будет действительно выделен
  printf("%i\n", sizeof(arr));
}
Все скомпилировалось и отработало без ошибок.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2017, 09:22

Что делает оператор &= в AutoIt?
Что делает оператор &amp;= в AutoIt?

Стандартные действия с числами: что делает >> и & в коде
unsigned char bytes; bytes = ip &amp; 0xFF; bytes = (ip &gt;&gt; 8) &amp; 0xFF; bytes = (ip &gt;&gt; 16) &amp; 0xFF; bytes = (ip &gt;&gt; 24) &amp;...

Что значит var в параметрах функции
Что значит var в парнаметрах функции, для чего она там? и что изменится если убрать var? function name (var a:integer) { }

Объяснить, что делает операция *& и чем она отличается от простого указателя?
Пожалуйста объясните что делает этот оператор...чем он отличается от простого указателя?

Что означает [In] в параметрах при объявлении API функции?
Например: public static extern IntPtr CreateCompatibleBitmap( IntPtr hdc, int nWidth, int nHeight);


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru