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

Указатели. Не понимаю - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ вычисление наращенной суммы ренты с использованием операторов множественного выбора http://www.cyberforum.ru/cpp-beginners/thread737808.html
помогите,пожалуйста,ответить на вопрос в билете на экзамен,буду очень благодарна: программа,реализующая вычисление наращенной суммы ренты с использованием операторов множественного выбора(с...
C++ как можно переделать программу? как можно переделать эту программу так, чтобы использовались функции класса string?) #include <iostream> using std::cout; using std::endl; int main() { http://www.cyberforum.ru/cpp-beginners/thread737785.html
C++ Вычислить и напечатать таблицу значений V для десяти различных значений радиусов R1, R2, ..., R10 трубы
Условие: Объемные расходы воды в секунду определяются по формуле: http://www.cyberforum.ru/attachments/cpp-beginners/215250d1355866277-1.jpg где R - радиус цилиндрической трубы, м; ню -...
Обработка элементов файла.Каждый отрицательный элемент в файле заменить результатом его целочисленного деления на 3 C++
Ввести файл F. Каждый отрицательный элемент в файле заменить результатом его целочисленного деления на 3. Файл вывести до и после преобразования. Я так поняла название файла пользователь должен...
C++ Помогите сделать блок-схему к лабораторной работе http://www.cyberforum.ru/cpp-beginners/thread737761.html
Помогите сделать блок-схему к этой лабе. Код прилагается :) Спасибо! В одномерном массиве {3.24, -7.16, 2.28, -0.16, -3.22, 7.14, 2.88, -3.20, 0.99, -4.15} вычислить: 1) сумму отрицательных...
C++ не мгу понять что заошибка #include <iostream> #include <clocale> #include <conio.h> #include <stdlib.h> #include <time.h> #include <fstream> #define IA 16807 #define IM 2147483647 #define AM (1.0/IM) #define IQ 127773 подробнее

Показать сообщение отдельно
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.12.2012, 18:05
Цитата Сообщение от extremist38 Посмотреть сообщение
Будет ли реализация через ссылку
C++
1
2
3
4
void Dit(int &x)
{
  x *= 2;
}
являться грамотно написанной и работающей? Или это всё же лучше делать через указатели?
Лучше указатель, или нет, может зависеть от различных внешних факторов. Может большинство фактических параметров - динамические данные, или элементы массива, перебираемого адресной арифметикой? Тогда указатель просто удобней синтаксически, так как в случае ссылки его придётся разыменовывать, а при передаче по указателю динамическое данное, или элемент массива, перебираемого адресной арифметикой, можно передавать без дополнительных операций:
C++
1
2
3
4
5
6
7
8
9
10
void Dit(int &x)
{
  x *= 2;
}
int a[1000];
int *p;
for (p=a+999; p>=a; --p)
{
 Dit(*p);
}
, но
C++
1
2
3
4
5
6
7
8
9
10
void Dit(int *x)
{
 *x *= 2;
}
int a[1000];
int *p;
for (p=a+999; p>=a; --p)
{
 Dit(p);
}
. В функции синтаксис указателя использован 1 раз, а таких циклов могут быть тысячи по всей программе. Или ты хочешь поддерживать nullptr? Тогда
C++
1
2
3
4
void Dit(int *x)
{
 if (x)*x *= 2;
}
, но ссылкой это сделать нельзя. А так
C++
1
2
3
4
void Dit(int &x)
{
  x *= 2;
}
вполне валидно.

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
тебя это не должно волновать
в любом случае ты получишь корректный результат
Согласен.

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