Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Принцип изменения переменной через указатель 
:(
    Опции темы
n199a
  Дата 23.7.2013, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Код

#include <stdio.h>
void change(int *);
int main() {
    int i;
    i = 2;
    change(&i);
    printf("вне = %d\n", i);
    return 0;
}
void change (int *a) 
    {
        *a +=3;
    }

Мне не очень понятно, как это через указатель, который хранит адрес переменной, можно изменять значение самой переменно?
Код

*a +=3;

Адрес в данном случае (у всех по разному) равен 2340197, получается, что 2340197 = 2340197 + 3, а не 5.
Каким образом это происходит?

Это сообщение отредактировал(а) n199a - 23.7.2013, 21:31
PM MAIL   Вверх
Albor
Дата 23.7.2013, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Цитата(n199a @  23.7.2013,  20:30 Найти цитируемый пост)
Адрес в данном случае (у всех по разному) равен 2340197, получается, что 2340197 = 2340197 + 3, а не 5.
Каким образом это происходит?

Увеличивается не адрес, а содержимое по этому адресу.
PM MAIL ICQ   Вверх
n199a
Дата 23.7.2013, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(Albor @  23.7.2013,  21:37 Найти цитируемый пост)
Увеличивается не адрес, а содержимое по этому адресу. 

Почему не адрес, работа ведь происходит непосредственно с адресом переменной?
Или правильней говорить так: работа происходит со значением переменной находящейся по данному адресу?
Тогда вопрос, как изменить адрес переменной?

Это сообщение отредактировал(а) n199a - 23.7.2013, 21:45
PM MAIL   Вверх
Albor
Дата 23.7.2013, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Цитата(n199a @  23.7.2013,  20:41 Найти цитируемый пост)
Почему не адрес, работа ведь происходит непосредственно с адресом переменной?

Потому что вы применяете операцию разименования указателя, вы ведь пишите *а+=3, а не а+=3.
PM MAIL ICQ   Вверх
n199a
Дата 23.7.2013, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(Albor @  23.7.2013,  21:48 Найти цитируемый пост)
Потому что вы применяете операцию разименования указателя, вы ведь пишите *а+=3, а не а+=3. 

Про разыменование у меня ничего не написано. Спасибо, сейчас буду читать про разыменование.
PM MAIL   Вверх
EgoBrain
Дата 25.7.2013, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Цитата(n199a @  23.7.2013,  21:41 Найти цитируемый пост)
Тогда вопрос, как изменить адрес переменной?

Никак, можно создать новую переменную и у нее будет другой адрес.
А вообще строго говоря адрес не у переменной а у памяти, по этому адресу памяти лежит что-то, чтобы с этими ячейками работать нужно знать тип данных (с двумя байтами робишь или с четырьмя (от 1 до +бесконечности)), чтобы работать было удобно нужно задать символическое имя.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.