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

Понимание для чего вообще нужны указатели? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Проблема с pow http://www.cyberforum.ru/cpp-beginners/thread382561.html
#include <iostream> #include <conio.h> #include <math.h> using namespace std; class Triangle { public: int a,b,c;
C++ Считать массив строк из файла Например есть файл in.txt, с него нужно считать массив строк в мемо, а в другом мемо записать эти же строки в ascii кодах, например: в файле: abc bcd def в первом мемо должно отобразиться то же самое что и в файле, а во втором их коды: 97 98 99 98 99 100 100 101 102 как реализировать такую функцию? заранее спасибо! http://www.cyberforum.ru/cpp-beginners/thread382557.html
глобал в библиотеке, не отображается в дебагере C++
Использую студию 2010, профешинал. Есть в статик библиотеке глобальная переменная, внутри этой библиотеке в дебагере ее поля вопросиками показываются, а хотя извлекается оттуда все нормально. Но очень мешает отлаживать. Мб кто встречал такие проблемы и знает решение. P.S. глобальная переменная является структурой.
C++ Очередь, С++
здраствуейте, помогите реализовать алгортитм :pardon: С++ , буду признателен =) Смоделировать очередь, в которой реализован такой механизм изъятия элемента из очереди: начало очереди всегда находится в первом элементе массива; при изъятии одного элемента из очереди, все остальные элементы перемещаются на одну позицию ближе к началу массива. После обработки всей заданной входной...
C++ Табуляция http://www.cyberforum.ru/cpp-beginners/thread382529.html
ПРивет всем передо мной стоит следующая задачка: Требуется вычислить значения yi заданной функции для ряда значений аргументов xi, i=1,…,N, при этом вычис-лив с точностью ε > 0 значения функций ряда согласно разложениям в степенные ряды. f=4/sin x + (ex – sin x)/cos x. Написал кой-чего, но работать не хочет. Помогите, а? #include <stdio.h> #include <conio.h> #include <math.h> double eps =...
C++ Дан текстовый файл f, содержащий буквы и целые числа. Выбрать все числа, которые делятся нацело на ... Дан текстовый файл f, содержащий буквы и целые числа. Выбрать все числа, которые делятся нацело на 2 и 4, но не делятся на 6. Записать эти числа в текстовый файл g, а все остальные числа – в текстовый файл h. подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.04.2012, 13:12     Понимание для чего вообще нужны указатели?
Цитата Сообщение от Диман56 Посмотреть сообщение
Сейчас будет чистый мой тупняк. Слабонервным дальше не читать. Итак, для чего вообще нужны указатели? Я вот не пойму, зачем их надо было вообще придумывать??? Не понимаю их конкретной пользы, смысла. Кто-нибудь может по-человечески объяснить?
Указателем называется данное специального вида, используемое для хранения адреса подпрограммы, или другого данного. В том числе, он может хранить и адрес другого указателя. Сами указатели обычно целые, а адреса есть номера байтов. Всякая переменная в памяти есть ячейка по некоторому адресу, но этот адрес может валяться и в коде программы.
C++
1
2
int a;
a=10; // Здесь в ячейку памяти пишется значение, но сделать это можно и так: asm {MOV <адрес a>,10
. Это прямая адресация, адрес данного валяется в самой команде. Также можно поступить и при адресации поля структуры и при адресации элемента статического массива через константный индекс. Но так нельзя делать, если адрес не известен на этапе компиляции, а он не может быть известен на этапе компиляции, если индекс надо взять из данного, например, из счётчика цикла. В этом случае адрес надо вычислить. Значит задача: массив занимает n ячеек памяти подряд размером s байт каждая, начиная с байта номер a, первая ячейка массива хранит элемент с индексом 0, остальные элементы располагаются в порядке возрастания индексов, надо вычислить адрес adress ячейки, хранящей элемент с индексом i. Адрес этой ячейки вычисляется по формуле: adress=a+i*s. Для этого уже придётся загружать a в регистр, как данное и вычислять adress путём алгебраических операций. А для этого его уже придётся где то хранить в виде данного, а не как часть программы. Как вариант - в сегменте кода, но всё таки это данное. Пришли к указателю. В паскале вся эта арифметика указателей при обращении к элементам массивов просто спрятана в реализацию операторов, на сях она спрятана не до конца, так как структура массива описана в стандарте и объявлена эквивалентность
C++
1
a+20=10;
,
C++
1
a[20]=10;
,
C++
1
p[20]=10;
и
C++
1
p+20=10;
при
C++
1
2
3
int a[10];
int *p;
p=a;
.

Добавлено через 6 минут
Динамические же массивы, деревья, списки, стеки, очереди, графы и любые другие динамические контейнеры вообще нельзя делать без явных указателей на уровне абстракции исходного кода самих контейнеров. В c# из-за этого нельзя создавать свои контейнеры, можно только пользоваться готовыми шаблонами контейнерных типов, какие сочли нужными в мелкософте. Но ведь мелкомягкие не боги, они не могут предусмотреть всего. Программистская мысль должна развиваться и в первую очередь в области проектирования контейнеров, а зарешёченные развиваться не могут, им все программы диктует стандарт мелкософта, шаг влево/шаг вправо считается побег, прыжок на месте - попытка улететь, ось давит сверху без предупреждения.
 
Текущее время: 10:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru