Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
1

Адреса и указатели

22.10.2011, 17:19. Просмотров 901. Ответов 15
Метки нет (Все метки)

Приветствую!
Не могу понять, как работать с указателями и адресами для переменных. Если можно, как можно проще объясните, коль не сложно. Книгу читал но сути так и не понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2011, 17:19
Ответы с готовыми решениями:

указатели и адреса.
Пользователь вводит с клавиатуры строку – предложение с пробелами и знаками...

Указатели и адреса объектов
Вот код: #include <conio.h> #include <iostream.h> void main() { ...

Строки, указатели и адреса
есть код { char *str="Welcome"; cout<<str<<" "<<(void *)str<<"...

Адреса и указатели на языке С++
Pomogite pliz((( #include <iostream.h> typedef int* IntPtrType; int main()...

Указатели, адреса и значения
У меня 2 вопроса по поводу указателей. Прошу знатоков С++ помочь разобраться ...

15
Noa
57 / 34 / 0
Регистрация: 08.04.2008
Сообщений: 153
22.10.2011, 17:23 2
Что конкрктно не понятно?
0
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
22.10.2011, 17:26  [ТС] 3
Да все. Как использовать, использование & и *. Вообще, с самого начала.
0
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
22.10.2011, 17:35 4
int a; а создаётся в стеке
a=5; поместить по этому адресу а 5

int a[10]; создаётся массив а в стеке в виде a[0]-0x0, a[1]-0x4, a[2]-0x8....
а[5]=2; значит в адрес а (0х0 + 5*4 его индекс=0х20) поместить число 2

int *a;
a=5; поместить вместо адреса а (0х0) адрес 0х5

Добавлено через 3 минуты
это тебе надо тока в функциях
void fun(int n)
{
n=23; ошибка так как функция принимает число n допостим 5 а пять не может быть 23
}

void fun(int *n)
{
n=23; всё ок так как в память по адресу n (допустим 0х00230) записали чило 23(но в этом случае функции надо передавать адрес для этого операция & и нужна допустим)
}
int n=3;
fun(n) для второго примера не подходит передача 3
fun(&n)подходит передача 0х23
1
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
22.10.2011, 17:48  [ТС] 5
Что-то проясняется. Можете прокомментировать, как можно подробнее :
C++
1
2
int MyVar = 7;
int* pMyVar = &MyVar;
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2011, 17:52 6
Цитата Сообщение от Van111 Посмотреть сообщение
void fun(int n)
{
n=23; ошибка так как функция принимает число n допостим 5 а пять не может быть 23
}
какая же это ошибка, локальной переменной присвоили значение 23, все нормально
1
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
22.10.2011, 17:52 7
Цитата Сообщение от nullbyte.dev Посмотреть сообщение
int MyVar = 7; int* pMyVar = &MyVar;
да без базара
MyVar это адрес в памяти по которому записано число 7, операции с этой переменной будут проводится над числом если не ставить знаки типа * и ?
*pMyVar это адрес в памяти в котором хранится адрес переменной MyVar
1
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
22.10.2011, 17:53  [ТС] 8
Цитата Сообщение от Thinker Посмотреть сообщение
какая же это ошибка, локальной переменной присвоили значение 23, все нормально
кстати да, я только что проверил.
0
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
22.10.2011, 17:54 9
Цитата Сообщение от Thinker Посмотреть сообщение
какая же это ошибка, локальной переменной присвоили значение 23, все нормально
точно а то я чё то перепутал
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2011, 17:57 10
Цитата Сообщение от Van111 Посмотреть сообщение
точно а то я чё то перепутал
Вы наверное хотели сказать, что изменение этой переменной n в данной функции никак не повлияет на переменную, значение которой передавалось из исходной функции
2
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
22.10.2011, 17:59 11
nullbyte.dev, если вы в этом хотите совсем суперски разбираться почитайте ассемблер уровнем от новичка до более менее продвинутого прогера (лично я бы знания ассемблера не на какой другой язык не променял) и изучите как на языке ассемблера выглядит с++ операторы.
P.S. поверьте лишним не будет

Добавлено через 27 секунд
Цитата Сообщение от Thinker Посмотреть сообщение
Вы наверное хотели сказать, что изменение этой переменной n в данной функции никак не повлияет на переменную, значение которой передавалось из исходной функции
да точно большое спасибо
1
Noa
57 / 34 / 0
Регистрация: 08.04.2008
Сообщений: 153
22.10.2011, 18:07 12
nullbyte.dev, я бы вам советовал бы прочитать книгу С. Прата - Язык программирования С++. Лекции и упражнения, издание 5 (в нете ищется на раз-два, если что могу помочь), там очень подробно указатели и ссылки разжеваны.
1
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
22.10.2011, 18:09  [ТС] 13
Noa, не поверите, именно ее и читаю. Сейчас на странице 111, пошли динамические массивы и я решил все-таки хорошо уяснить для себя указатели и адреса.
0
Noa
57 / 34 / 0
Регистрация: 08.04.2008
Сообщений: 153
22.10.2011, 18:26 14
А какое у вас издание? Я советую именно 5, ибо там есть дополнительные главы. Тогда я еще не могу понять ваши вопросы, открыл книгу, там перед динамическими массивами очень хорошо описан принцип работы указателей. Вы эти главы точно прочитали?
0
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
22.10.2011, 18:28  [ТС] 15
Оказалось, у меня 4 издание, пойду скачаю пятое. Читал, видимо невнимательно, перечитаю для закрепления.
0
Noa
57 / 34 / 0
Регистрация: 08.04.2008
Сообщений: 153
22.10.2011, 18:35 16
Цитата Сообщение от nullbyte.dev Посмотреть сообщение
Оказалось, у меня 4 издание, пойду скачаю пятое. Читал, видимо невнимательно, перечитаю для закрепления.
Да, перечитайте, там очень понятно написано.
1
22.10.2011, 18:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2011, 18:35

Указатели, Оператор взятия адреса
Вообщем, ребят, недавно разбирался с указателями в С++ и столкнулся с проблемой...

Почему указатели имеют одинаковые адреса
Например, если взять указатели на массивы. **m имеет тот же адрес, что и *m,...

[Указатели]Использование операции получения адреса операнда
Здравствуйте! Объясните пожалуйста, почему в пером случае, когда присваиваем...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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