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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2023, 21:08   #1
BringerLuck
Новичок
Джуниор
 
Регистрация: 14.03.2023
Сообщений: 4
Сообщение Динамическая память

Я получил вот такое задание в университете, Описать 2 указателя на вещественный тип. Выделить для них динамическую память. Ввести значения в выделенную память с клавиатуры. Поменять местами их значения.
ну вот у меня получилось что-то такое, помогите исправить, а то моя глупость не дает мне этого сделать
Код:
#include <math.h>
#include <iostream>

using namespace std;

int main()
{
setlocale (LC_ALL, "Rus");


int a;
int b;
int na, nb;


cout<<"a = " ; cin >> a;
cout<<"b = " ; cin >> b;

{
	cout<<"\n" << "выделение памяти для а = " ; cin >> na;
    cout<<"выделение памяти для b = " ; cin >> nb;
}

int* pa=&a;
int* pb=&b;

int *pa=new int(na);
int *pb=new int(nb);


{
	int *pcb=&*pb;
	*pa=*pb;
	*pcb=*pa;
}

  cout<<"\n"<<"значения a = " << *pa << endl;
  cout<<"значения b = " << *pcb << endl;
return 0;
}
BringerLuck вне форума Ответить с цитированием
Старый 14.03.2023, 21:20   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

1) вещественных. Значит берём не int, а float
2) Менять достаточно значения
Код:
#include <iostream>

int main() {
  float *a; // Объявили указатель на float
  a = new float; // Выделили память под float
  std::cout << "Введите a = "; std::cin >> *a; // Запросили и ввели float
// Повторили для b
  float *b = new float; // Объявили указатель на float и выделили память под него
  std::cout << "Введите b = "; std::cin >> *b; // Запросили и ввели float
// Обмен местами значений float'ов
  float c = *a;
  *a = *b;
  *b = c;
  std::cout << "a = " << *a << "; b = " << *b << std::endl;
// Обмен местами указателей на float'ы
  float *d = a;
  a = b;
  b = d;
  std::cout << "a = " << *a << "; b = " << *b << std::endl;
// Высвободили память
  delete b;
  delete a;
}
Чтобы понять что происходит представьте следующее: у вас есть некоторый массив (оперативная память компьютера). Для простоты понимания представим её типизированным массивом: float RAM[MAX_RAM] = {0};
Указатель - это индекс в этом массиве, а значение элемента это данные вводимые пользователем. Когда вы запрашиваете память у системы, то вам возвращают указатель. Но этому указателю (индексу) так же соответствует элемент массива, куда и вводит данные пользователь.

Т.е. float *a хранит указатель (индекс элемента массива); a = b - присваивает одному указателю другой (индекс массива меняется); *a - обращение к элементу массива.

Последний раз редактировалось macomics; 14.03.2023 в 21:31.
macomics вне форума Ответить с цитированием
Старый 14.03.2023, 21:26   #3
BringerLuck
Новичок
Джуниор
 
Регистрация: 14.03.2023
Сообщений: 4
По умолчанию

спасибо
BringerLuck вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память kitsun Помощь студентам 1 22.11.2013 19:38
Динамическая память. Swerlo Общие вопросы C/C++ 1 27.12.2011 20:59
динамическая память zhenya.ya Помощь студентам 2 24.02.2010 20:58
Динамическая память!!! Doholyan Паскаль, Turbo Pascal, PascalABC.NET 12 30.06.2009 17:11
Динамическая память liver1981 Общие вопросы C/C++ 5 22.04.2009 09:16