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

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

Войти
Регистрация
Восстановить пароль
 
 
dr.curse
387 / 343 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
#1

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

22.11.2010, 17:24. Просмотров 21647. Ответов 39
Метки нет (Все метки)

Кто нибидь может мне обястнить укасзатели в С++,ато я некак не врубаюсь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2013, 08:59     Указатели - в чем суть? #21
Двойной указатель есть указатель на указатель на не указатель. То есть это некое данное, значение которого - адрес другого данного, чьё значение - адрес третьего данного, но уже его значение адресом не является, или же это некое данное, значение которого - адрес другого данного, значение которого - адрес функции.

Добавлено через 46 минут
Например, двойной указатель на char есть данное, значение которого есть адрес другого данного, значение которого есть адрес, по которому лежит char.
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 386
19.11.2013, 10:37     Указатели - в чем суть? #22
А пример функционала в коде ?
D_Ok
44 / 33 / 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
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
11.02.2014, 18:43     Указатели - в чем суть? #24
Цитата Сообщение от D_Ok Посмотреть сообщение
&x это адрес чего?
Адрес той ячейки памяти, в которой хранится этот указатель.
Цитата Сообщение от D_Ok Посмотреть сообщение
int *x = new int;
Выделяет память для хранения указателя в стеке и для значения,
определяемого указателем, в куче.
D_Ok
44 / 33 / 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
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
12.02.2014, 08:32     Указатели - в чем суть? #26
Цитата Сообщение от D_Ok Посмотреть сообщение
если переменная или размер массива не инициализирован, то и память под него не будет выделятся, так?
Не так. Если переменная не инициализирована, то в ней находится мусор. Переменная это просто кусок памяти - при объявлении переменной он выделился, а что в нем находилось одному богу известно.
Может даже случиться, что произойдет попытка создать массив отрицательного размера.
Цитата Сообщение от D_Ok Посмотреть сообщение
если переменная false, то и память под массив не выделится?
Все выделится. Потому как выделение памяти происходит раньше, чем проверка условия (если вы говоря false имели в виду переменную turn). А в последней строке произойдет просто потеря размера динамического массива, что чревато либо утечкой памяти, если size станет меньше, чем был, либо, если станет больше, выходом за границы, а следовательно попыткой обращения к чужой памяти.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.02.2014, 08:36     Указатели - в чем суть? #27
Добавлено через 1 минуту
Цитата Сообщение от D_Ok Посмотреть сообщение
В этом примере например если переменная false,
В этом примере вообще нет логических переменных.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
12.02.2014, 08:53     Указатели - в чем суть? #28
Цитата Сообщение от taras atavin Посмотреть сообщение
В этом примере вообще нет логических переменных.
В условии тернарного оператора int неявно приводится к bool. Строго говоря, тут есть rvalue типа bool.
Логических именно переменных - нет.
Но, если уж поправлять, то полностью
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
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
12.02.2014, 11:38     Указатели - в чем суть? #30
Цитата Сообщение от taras atavin Посмотреть сообщение
Не может, size_t беззнаковый.
И что?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.02.2014, 19:10     Указатели - в чем суть? #31
А то, что он не поддерживает отрицательных значений. Попытка выделить отрицательное количество памяти столь же не возможна, как и красное, или зелёное количество элементов массива, синий размер физической памяти, коричневая частота таймера.
D_Ok
44 / 33 / 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
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
13.02.2014, 00:15     Указатели - в чем суть? #33
Цитата Сообщение от D_Ok Посмотреть сообщение
C++
1
2
3
4
//.....
    int size = 0; //ТУТ
    char *ar = new char [size];
//.....
Падает из-за выделенного.

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

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

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

Не по теме:

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

taras atavin
13.02.2014, 10:25
  #37

Не по теме:

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

D_Ok
44 / 33 / 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
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
14.02.2014, 00:26     Указатели - в чем суть? #39
Цитата Сообщение от D_Ok Посмотреть сообщение
чето не то
Что не то? У тебя выделялся массив нулевого размера, а потом ты пытался в него что-то записывать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2014, 01:32     Указатели - в чем суть?
Еще ссылки по теме:
Объясните, в чем суть директив #ifndef/#define/#endif C++
Как в int* var хранить массивы? В чем суть задания? C++
простыми словами объяснте пожалуйста, в чем суть этого оператора: -> C++
Чем полезны указатели? C++

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

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

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