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

Изменение переменной перез указатель - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
arfaa
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 27
27.04.2012, 15:14     Изменение переменной перез указатель #1
Здравствуйте, есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
void f(int *j);
int main()
{
 int i;
 int *p;
 p=&i;
 f(p);
 cout<<i;
 return 0;
}
void f(int *j)
{
 *j=100;
}
Вопрос заключается в непонимании вывода значения i. р содержит адрес i -> параметр-указатель *j принимает значение аргумента р -> p и j теперь оба указывают на переменную i, указатель j получил значение 100. Почему i=100? Ведь в коде нигде не указано само значение i,указывается только его адрес с помощью символа "&", в каком месте происходит запись в i числа 100 и каким образом?
Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
27.04.2012, 15:25     Изменение переменной перез указатель #2
Число 100 - это значение записанное по адресу j, равного значению переменной p,
которой присвоили значение адреса переменной i. В результате i равно 100.
p == j, *j == *p == 100

int i = 10; // произвольное значение типа int.
int *p = &i; // Получаем адрес переменной i и присваеваем его указателю p.
// &-оператор вычисления адреса, * - оператор обозначения указателя.
int* j = *p; // Присвоили значения адреса p указателю j.
*p = 100; // Присвоили значение 100 по заданному адресу p.
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
27.04.2012, 15:31     Изменение переменной перез указатель #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
void f(int *j);
 
int main()
{
    int i;
    int *p; //указатель на тип int
    p=&i; //р содержит адрес i
    f(p); //передаем адрес i; работаем со значением, находящимся по этому адресу
    cout<<i;
    return 0;
}
void f(int *j) //*j - то же самое, что и i - происходит разыменование
{
    *j=100; //работаем со значением
}
return 0;
}
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
27.04.2012, 15:35     Изменение переменной перез указатель #4
Нет "разименование" указателя происходит тогда когда используем ссылки int*&j = (int*&)p;
Простейший пример его - int a = 10; int& b= a; - "разыменование" переменной, а указателя
см. выше.
Yandex
Объявления
27.04.2012, 15:35     Изменение переменной перез указатель
Ответ Создать тему
Опции темы

Текущее время: 12:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru