![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 18.08.2009
Сообщений: 289
|
![]()
Есть код
Код:
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 26.09.2009
Сообщений: 81
|
![]()
Звездочки - указатели на переменную pintArg
|
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() Код:
Код:
Код:
Если есть желание изменить переменную, объявленную в контексте другой функции, или созданную в куче(или ещё где), то в функцию нужно передавать адрес переменной. Объявляем функцию, как void fn(int* arg);. int* - тип, который называется указатель. Указатели содержат адреса переменных. Если относительно указателя применить оператор разыменования(*), то это говорит компилятору, что нужно класть значение не в эту переменную(указатель), а в переменную, которая находится по адресу, содержащемуся в этом указателе. Как всё происходит: В контексте функции создаётся переменная, она принимает значение - переданный адрес некой другой переменной, мы разыменовываем и кладём значение 10 по этому адресу, затем переменная с адресом(указатель) при выходе из функции уничтожается, но та переменная, на которую указатель указывал, теперь имеет значение 10 |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 18.08.2009
Сообщений: 289
|
![]()
То есть в int* звездочка - это оператор разыменования?
|
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Если он в выражении стоит то да.
I'm learning to live...
|
![]() |
![]() |
![]() |
#6 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
![]()
в функциях с++ чтобы аргумент передаваемый функции менялся, нужно передавать его по ссылке &n. В Си функциях аргументы могут меняться, там не надо ставить &. Используя указатель ты тем самым загружаешь в функцию адрес по которой хранится значение, *printArg = 10 значит и присвоить ему новое значение 10( разыменование указателя). В с++ с переменными так не выйдет
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
![]()
int* a; - объявляем переменную типа указатель на int, т.е. здесь * - часть имени типа. Если имени типа нет, а звездочка стоит перед именем переменной, то она относится к этой переменной и является уже оператором разыменовывания:
int b = *a; переменной типа int присваиваем значения, хранящееся по адресу, указанном в переменной a.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как организовать передачу файла в несколько секций... | ikot | Работа с сетью в Delphi | 1 | 31.05.2009 09:04 |
Поясните ООП | sodd | Общие вопросы Delphi | 1 | 23.02.2009 14:14 |
Осуществить передачу с клавы в объекты в программе с++ | Барби | Фриланс | 1 | 23.12.2008 11:17 |
Как осуществить передачу и прием пакета c клиента на сервер? | IIpopoK | Работа с сетью в Delphi | 6 | 07.12.2008 14:10 |