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

Указатели - в чем суть? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 155, средняя оценка - 4.64
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
22.11.2010, 17:24     Указатели - в чем суть? #1
Кто нибидь может мне обястнить укасзатели в С++,ато я некак не врубаюсь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2013, 08:59     Указатели - в чем суть? #21
Двойной указатель есть указатель на указатель на не указатель. То есть это некое данное, значение которого - адрес другого данного, чьё значение - адрес третьего данного, но уже его значение адресом не является, или же это некое данное, значение которого - адрес другого данного, значение которого - адрес функции.

Добавлено через 46 минут
Например, двойной указатель на char есть данное, значение которого есть адрес другого данного, значение которого есть адрес, по которому лежит char.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
19.11.2013, 10:37     Указатели - в чем суть? #22
А пример функционала в коде ?
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
11.02.2014, 18:24     Указатели - в чем суть? #23
Помогите разобраться

C++
1
2
3
int *x = new int;
    *x = 1;
std::cout << x << "\t" << &x << std::endl;
*x - это получается переменная;
x - ее адрес;
а - &x это адрес чего? и под что выделяется эта область памяти? под сам указатель?
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1785
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
11.02.2014, 18:43     Указатели - в чем суть? #24
Цитата Сообщение от D_Ok Посмотреть сообщение
&x это адрес чего?
Адрес той ячейки памяти, в которой хранится этот указатель.
Цитата Сообщение от D_Ok Посмотреть сообщение
int *x = new int;
Выделяет память для хранения указателя в стеке и для значения,
определяемого указателем, в куче.
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
11.02.2014, 20:35     Указатели - в чем суть? #25
Хмм окей, с этим понятно боле менее.
а так:
C++
1
2
3
4
int size, turn;
int *x = new int[size];
std::cin >> turn;
turn ? size = 10 : size = 0;
память под указатель будет выделятся в любом случае (ну если условий других нету), а вот если переменная или размер массива не инициализирован, то и память под него не будет выделятся, так? В этом примере например если переменная false, то и память под массив не выделится?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
12.02.2014, 08:32     Указатели - в чем суть? #26
Цитата Сообщение от D_Ok Посмотреть сообщение
если переменная или размер массива не инициализирован, то и память под него не будет выделятся, так?
Не так. Если переменная не инициализирована, то в ней находится мусор. Переменная это просто кусок памяти - при объявлении переменной он выделился, а что в нем находилось одному богу известно.
Может даже случиться, что произойдет попытка создать массив отрицательного размера.
Цитата Сообщение от D_Ok Посмотреть сообщение
если переменная false, то и память под массив не выделится?
Все выделится. Потому как выделение памяти происходит раньше, чем проверка условия (если вы говоря false имели в виду переменную turn). А в последней строке произойдет просто потеря размера динамического массива, что чревато либо утечкой памяти, если size станет меньше, чем был, либо, если станет больше, выходом за границы, а следовательно попыткой обращения к чужой памяти.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.02.2014, 08:36     Указатели - в чем суть? #27
Добавлено через 1 минуту
Цитата Сообщение от D_Ok Посмотреть сообщение
В этом примере например если переменная false,
В этом примере вообще нет логических переменных.
DrOffset
6449 / 3823 / 885
Регистрация: 30.01.2014
Сообщений: 6,618
12.02.2014, 08:53     Указатели - в чем суть? #28
Цитата Сообщение от taras atavin Посмотреть сообщение
В этом примере вообще нет логических переменных.
В условии тернарного оператора int неявно приводится к bool. Строго говоря, тут есть rvalue типа bool.
Логических именно переменных - нет.
Но, если уж поправлять, то полностью
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.02.2014, 11:29     Указатели - в чем суть? #29
Цитата Сообщение от D_Ok Посмотреть сообщение
*x - это получается переменная;
x - ее адрес;
а - &x это адрес чего? и под что выделяется эта область памяти? под сам указатель?
У тебя есть две переменные: автоматическая, и динамическая. Динамическая хранит обычное целое, а автоматическая особая, она хранит значение указателя, которое есть адрес другого данного. Получается, что одна переменная хранит адрес другой. Но сама то она тоже хранится по какому то адресу. Так вот, x - автоматическая переменная указательного типа, то есть просто указатель, её значение - адрес обычного данного, *x - это уже динамическая переменная, хранящая обычное целое, а &x - адрес указателя.

Добавлено через 28 секунд
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Может даже случиться, что произойдет попытка создать массив отрицательного размера.
Не может, size_t беззнаковый.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
12.02.2014, 11:38     Указатели - в чем суть? #30
Цитата Сообщение от taras atavin Посмотреть сообщение
Не может, size_t беззнаковый.
И что?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.02.2014, 19:10     Указатели - в чем суть? #31
А то, что он не поддерживает отрицательных значений. Попытка выделить отрицательное количество памяти столь же не возможна, как и красное, или зелёное количество элементов массива, синий размер физической памяти, коричневая частота таймера.
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
12.02.2014, 23:40     Указатели - в чем суть? #32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
int main()
{
    using namespace std;
    int x;
    cin >> x;
    int size = 0;
    char *ar = new char [size];
    while (x)
    {
        size++;
        x%2 ? ar[size-1] = '1' : ar[size-1] = '0';
        x /= 2;
    }
    for (int i = size - 1; i >= 0; i--)
    {
        cout << ar[i];
    }
    delete []ar;
    cout << endl;
    return 0;
}
После выполнения вот такая ошибка, я так понял что-то записывается в ту область памяти еще? Но если закрыть окно, то программа выполнится, из-за его эта ошибка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
void binary(int x);
int main()
{
    using namespace std;
    int x;
    cin >> x;
    binary(x);
    return 0;
}
void binary(int x);
{
...
}
и еще, если загнать предыдущий код в функцию, там надо очищать выделенную память или после того как функция отработает, память которую она использовала сама очиститься?
Миниатюры
Указатели - в чем суть?  
DrOffset
6449 / 3823 / 885
Регистрация: 30.01.2014
Сообщений: 6,618
13.02.2014, 00:15     Указатели - в чем суть? #33
Цитата Сообщение от D_Ok Посмотреть сообщение
C++
1
2
3
4
//.....
    int size = 0; //ТУТ
    char *ar = new char [size];
//.....
Падает из-за выделенного.

Цитата Сообщение от D_Ok Посмотреть сообщение
и еще, если загнать предыдущий код в функцию, там надо очищать выделенную память или после того как функция отработает, память которую она использовала сама очиститься?
Нет. Надо очищать.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
13.02.2014, 09:27     Указатели - в чем суть? #34
Цитата Сообщение от taras atavin Посмотреть сообщение
А то, что он не поддерживает отрицательных значений
int поддерживает.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.02.2014, 09:35     Указатели - в чем суть? #35
Или как тактовая частота с запахом розы.

Добавлено через 34 секунды
Цитата Сообщение от SatanaXIII Посмотреть сообщение
int поддерживает.
Только не intом меряется память.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
13.02.2014, 10:24     Указатели - в чем суть? #36
taras atavin, уточню, что имел в виду: попытка выделения огромного куска памяти.

P.S. На будущее: для оффтопа есть специальный тег. Вот так он работает:

Не по теме:

Между ножками у процессора понюхайте.

taras atavin
13.02.2014, 10:25
  #37

Не по теме:

Это на какой же планете олово кокаин так хорошо заменяет, что ты уже нанюхался?

D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
13.02.2014, 23:56     Указатели - в чем суть? #38
Цитата Сообщение от DrOffset Посмотреть сообщение
Падает из-за выделенного.
чето не то
проблема в циклах, если их убрать и написать
C++
1
2
3
size = 4;
ar[2] = 21, ar[0] = 5;
delete []ar;
ну или что-то похожее без циклов, все норм, ошибки нету.
DrOffset
6449 / 3823 / 885
Регистрация: 30.01.2014
Сообщений: 6,618
14.02.2014, 00:26     Указатели - в чем суть? #39
Цитата Сообщение от D_Ok Посмотреть сообщение
чето не то
Что не то? У тебя выделялся массив нулевого размера, а потом ты пытался в него что-то записывать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2014, 01:32     Указатели - в чем суть?
Еще ссылки по теме:

Алгоритмы поиска. Подскажите, в чем суть алгоритма? C++
C++ Циклы while и for: в чем суть отличия?

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

Или воспользуйтесь поиском по форуму:
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
14.02.2014, 01:32     Указатели - в чем суть? #40
Цитата Сообщение от DrOffset Посмотреть сообщение
Что не то? У тебя выделялся массив нулевого размера, а потом ты пытался в него что-то записывать.
аа, все догнал...
Yandex
Объявления
14.02.2014, 01:32     Указатели - в чем суть?
Ответ Создать тему
Опции темы

Текущее время: 22:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru