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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Putney88
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 20
#1

Осмысление указателей - C++

29.07.2013, 01:35. Просмотров 1078. Ответов 26
Метки нет (Все метки)

Пожалуйста расскажите более популярным языком что это такое и для чего они нужны. Перечитал несколько раз пару дополнительных источников - не могу понять как они эффективно реализуются на деле..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2013, 01:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Осмысление указателей (C++):

по поводу указателей. Как правильно задавать массив указателей и его удалять? - C++
Т.е., например создаю указатель: TPoint *p_Point=NULL; а если массив? TPoint *p_MassPoint; //=?; как массив обнулить не ясно ...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) - C++
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей - C++
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Как обойтись без указателей и указателей на указатель? - C++
Ибо не совсем выходит понять,что на что тут указывает #include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SatanaXIII
Супер-модератор
Эксперт С++
5609 / 2643 / 244
Регистрация: 01.11.2011
Сообщений: 6,502
Завершенные тесты: 1
30.07.2013, 14:42 #16
Цитата Сообщение от Tulosba Посмотреть сообщение
Наверное один из самых элементарных случаев использования указателей - работа с элементами массива.
Я бы вот здесь поправил - с динамическими. Потому как работа со статическими массивами гораздо нагляднее посредством индексов-переменных.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
30.07.2013, 14:48 #17
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Я бы вот здесь поправил - с динамическими. Потому как работа со статическими массивами гораздо нагляднее посредством индексов-переменных.
Работа с любыми массивами нагляднее через индексацию. Но раз уж ТСу интересны указатели, то разницы в том, какой массив будет использоваться, не вижу вообще.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
30.07.2013, 15:23 #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Работа с любыми массивами нагляднее через индексацию. Но раз уж ТСу интересны указатели, то разницы в том, какой массив будет использоваться, не вижу вообще.
Можно бы начать с выделения памяти под одиночную динамическую переменную (сразу после экспериментов со стековыми переменными)). Тогда выделение памяти, инициализация указателя и освобождение памяти складывают какую-то картину. А потом, - динамические массивы.
С другой стороны массив на стеке - хорошее начало для самого первого шага. Как пример косвенного обращения.
три целых переменных на стеке:
C++
1
2
3
4
5
6
int a = 1;//объявили по имени и инициализировали
int b = 2;//
int c = 3;//
cout << a << " ";//обратились по имени
cout << b << " ";//
cout << c << " ";//
массив из трёх целых на стеке:
C++
1
2
3
4
5
6
int Arr[] = {1, 2, 3};//объявили по имени массив - непрерывную область,
// где память под элементы занята последовательно и инициализировали её
cout << Arr[0] << " ";//обратились по имени массива (косвенному признаку группы)
// и индексу (прямой координате в группе) 
cout << Arr[1]  << " ";//
cout << Arr[2]  << " ";//
массив из трёх целых на стеке с доступом через указатель:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int Arr[] = {1, 2, 3};//объявили по имени массив - непрерывную область,
// где память под элементы занята последовательно
int *ptr_Arr = 0;//объявили указатель на целое
ptr_Arr = &Arr[0];//присвоили адрес первого элемента в массиве 
cout << ptr_Arr << " ";//обратились по имени указателя к значению указателя
// выводится 16-ричный адрес первого элемента
cout << (ptr_Arr+1)  << " ";//
cout << (ptr_Arr+2)  << " ";//
 
cout << *ptr_Arr <<" ";//обратились по разименованному имени указателя, то есть по хранимому в нём адресу к значению первого элемента
cout << *(ptr_Arr+1)  << " ";//
cout << *(ptr_Arr+2)  << " ";//
Putney88
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 20
30.07.2013, 20:01  [ТС] #19
Премного благодарен!

Добавлено через 2 часа 51 минуту
Но, к сожалению на этом не остановимся..

Исходник:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<conio.h>
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
int arr[10];
int *a;
*a=arr[0];
cout<<arr[0];
getch();
        return 0;
}
Ошибка в отдельном окне :
"Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 00401174. Write of address 00000001'. Process stopped. Use Step or Run to continue."

Синяя полоска покрывает данную строку :
C++
1
int *a;
Выручайте..
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2013, 20:05 #20
Указатель неинициализирован. *a - какое у него содержимое по адресу?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.07.2013, 20:07 #21
Putney88, Указатель, выделение памяти под него
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2013, 20:11 #22
И массив неинициализирован.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<conio.h>
#include<iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    int arr[3] = {1, 2, 3};
    int *a;
    a = &arr[0];
    cout << *a << endl;
    getch();
}
Putney88
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 20
30.07.2013, 20:24  [ТС] #23
Понял, спасибо.
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
30.07.2013, 21:53 #24
У меня в универе были лабы по структурам данных. Надо было вручную выделять освобождать память и все это напрямую связано с указателями. Занятие еще то, но зато сейчас более-менее понятно.
dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
30.07.2013, 22:04 #25
Тоже начинал учить с++ с Шилдта, а как дошел до указателей попал в тупик. Не занимался примерно полгода А потом наткнулся на книгу Лафоре - ООП в с++. Там очень хорошо объясняется тема с указателями. Почитай, может тоже поймешь.
Putney88
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 20
30.07.2013, 22:28  [ТС] #26
Цитата Сообщение от dima55501 Посмотреть сообщение
Тоже начинал учить с++ с Шилдта, а как дошел до указателей попал в тупик. Не занимался примерно полгода А потом наткнулся на книгу Лафоре - ООП в с++. Там очень хорошо объясняется тема с указателями. Почитай, может тоже поймешь.
А как на счет последующего материала?
dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
31.07.2013, 00:34 #27
Цитата Сообщение от Putney88 Посмотреть сообщение
А как на счет последующего материала?
Я делал следующим образом: вначале читал Шилдта, он хорошо объясняет, но мало информации. А после открывал эту же тему у Лафоре, где тема рассматривается уже глубже. Ну и в итоге я понял многие базовые понятия языка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 00:34
Привет! Вот еще темы с ответами:

Различия указателей char* от указателей других типов - C++
Помогите пожалуйста разобраться! Прочитал раздел про указатели и даже вроде бы понял. Что касается указателей на тип int. Но что...

Создание массивов указателей на массивы указателей - C++
Помогите в решении задачи: создал массив указателей на массивы указателей на строки, но компилятор ругается на то что не может...

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

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.07.2013, 00:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru