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

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

Войти
Регистрация
Восстановить пароль
 
RioSteyn
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 5
#1

Указатели и ссылки - C++

22.06.2013, 22:59. Просмотров 368. Ответов 3
Метки нет (Все метки)

Собственно, не могу до конца осознать как это работает, вот пример из вики(комменты входят в пример)
C++
1
2
3
4
5
6
7
int  n  = 6;    // Объявление переменной n типа int и присваивание ей значения 6
int *pn = malloc( sizeof ( int ) ); // Объявления указателя pn и выделение под него памяти.
    *pn = 5;    // Разыменование указателя и присваивание значения 5.
     n = *pn;   // Присвоить n то значение (5), на которое указывает pn.
     free(pn);  // Освободить занятую память.
     pn = &n;   // Присваивает указателю pn адрес переменной n(указатель будет ссылаться на n).
     n = 7;     // *pn тоже стало равно 7
я проанализировал пример и и понял следующее:
1) при обьявлении переменной так (int x = 5 я присваиваю переменной х адрес на ячейку памяти со значением 5, который(адрес всмысле) уже никак не изменится. Вот напишу я потом (cout << &x и получу этот адрес, а теперь вопрос - почему, если я напишу (cout <<*x, мне выдаст ошибку. поидее я говорю "Выведи-ка мне значение из ячейки по адресу х" так почему не выводит?

2)при обьявлении переменной указателя т.е. так (int *x = new int) у меня, кстати, если использовать malloc, как в вики, не работает почему-то, ну да неважно). Я выделяю ячейку памяти для хранения типа данных инт и могу эту память очищать или создавать другие переменные с помощью указателей, которые будут ссылаться на эту ячейку, правильно?

Вобщем, я надеюсь, что вы, Уважаемые, скажете мне, что я не так понимаю в 1 случае и скажете, правильно ли я понял второй случай.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2013, 22:59     Указатели и ссылки
Посмотрите здесь:

Ссылки, указатели - C++
Доброго времени. Как, используя ссылки, указатели и, возможно, другие приемы сделать что-то вроде этого?: int a = 1; int b = 2; ...

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

Указатели и ссылки c++ - C++
Здравствуйте! Не могли бы вы объяснить как можно использовать ссылки и указатели c++ на практике? Я не пойму для чего они нужны!

Указатели и ссылки - C++
Допустим, что есть функция, в которую мы кидаем массив по указателю и кол-ву элементов. void printArray(int *arr, int elements) ...

Указатели и Ссылки - C++
извеняюсь,но никак не могу понять. int sum(int* inLeft, int* inRight) { if(inLeft == inRight) return *inLeft; ...

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

Указатели и ссылки? - C++
Ниже приведёна программы которая вызывает функцию. В функции происходит следующее создаются 2 массива в которые записыватся чётные и...

Ссылки vs Указатели - C++
Почему ссылки считаются более хорошим средством, чем указатели? Ведь если человек будет использовать сторонние классы, он может не...

Указатели и ссылки - C++
Экспериментируя с указателями пришел к вот таким выводам: int a; //переменная int *b; //указатель int &amp;c = a //ссылка на &lt;a&gt; ...

Указатели и ссылки [С++] - C++
Всем привет. я тут программу делаю. Цель: определить,принадлежит ли точка заданному промежутку(а точнее лежит внутри или снаружи фигуры)....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
23.06.2013, 00:18     Указатели и ссылки #2
Переменная x создается компилятором на стеке и уничтожается по выходу из блока. Это может быть закрывающаяся скобка функции, либо конструкция вида
C++
1
2
{
}
Звездочка применима к указателям, да и если бы Вы так написали с cout, то это было бы разыменование указателя, т.е. вывелось бы само значение в ячейке памяти. Но в данном случае к стековой переменной x звездочка неприменима.

По второму:
C++
1
int *x = new int;
C помощью new выделяем память в куче и указателю (теперь уже x) передаем адрес выделенной памяти. По этому адресу можно записать значение, например.
создавать другие переменные с помощью указателей
Это не совсем ясно для меня. Вы можете либо присваивать адрес только выделенного участка памяти (с помощью new или аналогов), либо просто адрес переменной, которая когда-то раньше была создана, либо c указателя:
C++
1
2
3
int x = 10;
int *p1 = &x;
int *p2 = p1; // оба указывают на x
Добавлено через 2 минуты
Можно конечно на выделять кучу участков памяти, присваивая лишь одному указателю все адреса по очереди. Но так каждый раз присваивая очередной адрес, мы будем терять предыдущие (если конечно память не освобождать), а это утечка.

C++
1
2
3
int *p1 = new int; //утерян
    p1 = new int; // утерян
    p1 = new int;
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6421 / 3060 / 304
Регистрация: 04.12.2011
Сообщений: 8,340
Записей в блоге: 3
23.06.2013, 01:08     Указатели и ссылки #3
Цитата Сообщение от RioSteyn Посмотреть сообщение
а теперь вопрос - почему, если я напишу (cout <<*x, мне выдаст ошибку.
x это не указатель, а имя переменной. При помощи & оператора взятия адреса можно получить адрес, но разыменовывать нужно тоже адрес, а не имя переменной. Вот так например можно:
C++
1
2
int x=123;
cout<<*(&x)<<endl;
RioSteyn
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 5
23.06.2013, 12:53  [ТС]     Указатели и ссылки #4
Спасибо, теперь стало яснее)
Yandex
Объявления
23.06.2013, 12:53     Указатели и ссылки
Ответ Создать тему
Опции темы

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