Форум программистов, компьютерный форум 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. подробнее

Показать сообщение отдельно
Bers
Заблокирован
13.11.2011, 00:33     Понимание для чего вообще нужны указатели?
Напишу вдогонку. Завтра может быть прочитаешь.

Адресная арифметика штука в общем то замороченная. И когда указатель начинает сидеть на указателе, и указателем погонять - запутаться в такой логике можно в три счета.

Сложность такого проекта резко возрастает, соответственно количество потенциальных ошибок увеличивается.

Поэтому, старайся по возможности всегда избегать ситуаций, когда у тебя один указатель указывает на другой. В с++ для этого есть множество решений.

Один из самых простых вариантов - это замаскировать указатель так, что бы он воспринимался не как указатель, а как отдельный тип данных. Например "строка" - это строка, а не "массив чаров".
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int main()
{
 
    //объявим всему миру,
    //что стековый массив чаров - это String,
    //в который влезет 255 символов
    typedef char String[255]; 
    
    
    //создадим массив String`ов (строк),
    //в который влезет 10 штук строк
 
    //Если бы не было typedef
    //Нам бы пришлось понимать это так:
    //Массив, в который влезет 10 штук других массивов, 
    //каждый из которых вмещает 255 символов.
    
    //Ты уже наверное догадался, что массив - 
    //это ничто иное, как указатель на свой первый элемент
 
    String* myArray= new String[10]; //сделали массив строк
    
    for(int i=0;i<10;++i)
    {
        //запишем данные в массив строк
        memcpy(myArray[i], "Привет, Мир!\0", sizeof(String) );   
        
        //прочитаем каждую строчку и выведем её на экран консоли
        std::cout<<myArray[i]<< std::endl; 
    }
 
    return 0;
}
Другой способ понижения сложности логики - это создание дополнительной сущности, которая инкапсулирует внутри себя знание об указателе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int main()
{
 
    //эту структуру очень просто понять. 
    //Правда ведь?
    struct String 
    {
        char Text[255];
    };
    
    //создаём десять штук таких структур
    String* myArray= new String[10]; 
 
    //Понять что такое структура String
    //И как создать массив структур
    //Намного проще, чем держать уме мысли об указателях,
    // которые указывают на указатели
    //Которые указывают на символы.
 
    //А все что проще - легче сделать
    //И меньше вероятность допустить ошибку
 
    for(int i=0;i<10;++i)
    {
        //запишем данные в массив строк
        memcpy(myArray[i].Text, "Привет, Мир!\0", sizeof(String) );   
        
        //прочитаем каждую строчку и выведем её на экран консоли
        std::cout<<myArray[i].Text<< std::endl; 
    }
 
    return 0;
}
Причем, во втором случае, твоя новая абстрактная сущность - суть новый тип данных.
Это класс. Его можно снабдить удобными методами обработки данных.

Можно сделать метод, который будит загружать данные в массив букв.
Можно сделать метод, который будит все буквы превращать в строчные, или в заглавные.
Ну и тп.

Если ты ещё чуть чуть пройдёшься в этом направлении, то начнешь понимать, что такое классы, оценишь удобства, которые они предоставляют программистам.
Ну а потом, ещё чуть чуть, и ты оценишь всю мощь и великолепие библиотеки STL
Ну а там, ещё годик другой пройдёт, и начнёшь говорить всем, что указатели - фуфло, и нафег они не нужны
Удачи.
 
Текущее время: 23:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru