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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
DorianLeroy
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 7
#1

Про указатели - C++

05.02.2011, 12:04. Просмотров 1546. Ответов 30
Метки нет (Все метки)

Здравствуйте я совсем маленький C++ программер, вот сейчас разбираюсь с указателями. Подскажите пожалуйста.
В книге встретил пример, который ввёл меня в ступор.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
 
int main(){
    int x,*p,*s;
     x = 10;
     s = &x;
     *p = x;
    cout << *p << " " << *s;
    cout << p << " " << s;
    
    system ("pause");
    return 0;
    }
Вот мой ход мыслей по поводу этого кода:
int x,*p,*s - объявляем переменную и указатели на целочисленный тип;
x = 10 - в переменную целочисленного типа(то есть в 16 бит) записываем значение 10.
s = &x - получаем адресс ячейки, где хранится х;
*p = x -получаем адресс ячейки где хранится х;(в комментариях книги написано что указатель p содержит неизвестный адресс(это мне непонятно))
cout << *p << " " << *s - получаем значения ячеек на которые указывают указатели(и там и там выводится значение X: 10, то есть по идее и в указателе р и в указателе s адресс ячейки х);
cout << p << " " << s - смотрим значения самих указателей, видим два разных адреса,хотя я думал здесь должен быть один адресс ячейки X. Здесь возникает вопрос, почему мы видим два разных адреса?
Где мои мысли неверны?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2011, 12:04     Про указатели
Посмотрите здесь:

Про указатели - C++
В среде C++ Builder разбираюсь с логикой работы с указателями. По определению (в моем его понимании) указатель это адрес в памяти на...

Про указатели . - C++
Всем привет: Продолжаю свою традицию: Вот придумал необычную задачку, может кому то она покажется неинтересной, сложная или простая...

Опят про указатели) - C++
int a = 5; int *b =&amp;a; cout &lt;&lt;*b&lt;&lt;endl; *b++; cout &lt;&lt;*b&lt;&lt;endl; В строке 4 что происходит? По идее если * то мы работаем...

Вопрос про указатели - C++
char *a = &quot;s&quot;; 1. Выделяется место в памяти 2. В это место записывается s 3. Указателю a приваивают адрес памяти где храниться s ...

Про массивы и указатели - C++
#include &lt;iostream&gt; using namespace std; int Digit = { {1,8,6,7},{3,2,9,4},{5,1,2,7},{8,6,2,5} }, test; int main() { ...

Популярно объясните про указатели - C++
Что-то плохо даётся мне тема про указатели. Я хорошо уяснил, что вот так создаётся указатель: int *pointer; Я так же хорошо...

Вопрос про указатели на массивы - C++
В книге написано int a; int *p; p = &amp;a; //У меня выдает ошибку p = &amp;a; //Так работает p = ПОЛУЧИТЬ_адрес_объекта - Это...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
05.02.2011, 12:16     Про указатели #2
Цитата Сообщение от DorianLeroy Посмотреть сообщение
C++
1
2
s = &x;
*p = x
;
& -оператор взятия адреса. берем адрес переменной х и заносим его в s
* - оператор "разыменования", или другими словами - доступ к значению объекта через адрес этого объекта.
Т.е. есть какой-то указатель p, смотрим что по этому адресу находится (*p), и заносим туда значение такое же, какое и у х.
и того в памяти у нас две 10. одна доступна по *s, вторая по *p
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
05.02.2011, 12:16     Про указатели #3
s = &x - в s содержится адресс x
*p=x; указатель становится равным 10 тоесть вы присваиваете указателю 10, не получив адресс со-но адресс у p будет отличный от s
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
05.02.2011, 12:18     Про указатели #4
А можно знать с какой книги взят этот код? Он по идее не рабочий.

C++
1
*p = x;
Пишет 10-ку в адрес, который указывает p.

C++
1
s = &x;
Теперь s - это адрес переменной x.
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
05.02.2011, 12:20     Про указатели #5
Цитата Сообщение от Евгений М. Посмотреть сообщение
Он по идее не рабочий.
Почему?
slavich
12 / 12 / 1
Регистрация: 25.10.2009
Сообщений: 32
05.02.2011, 12:24     Про указатели #6
Не рабочий потому как под указатель p не выделена память.
Правильно будет так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
 int main(){
    int x,*p=new int,*s;
     x = 10;
     s = &x;
     *p = x;
     cout << *p << " " << *s;
     cout << p << " " << s;
    
    system ("pause");
    delete p;
    return 0;
    }
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
05.02.2011, 12:50     Про указатели #7
slavich, почему, указатель - всего лишь переменная, способная хранить адрес другой переменной. Когда мы создаём переменную, например, типа int, но не инициализируем её, она хранит мусор. Когда мы создаём указатель на тип int, он тоже сначала хранит просто мусор, который, однако, может быть интерпретирован как адрес. Вот по этому-то адресу мы и пишему злополучную десятку.

Добавлено через 2 минуты
Другое дело, удастся ли нам по этому адресу записать хоть что-нибудь.
zinador
2 / 2 / 0
Регистрация: 15.11.2009
Сообщений: 100
05.02.2011, 13:43     Про указатели #8
В таком виде он тоже рабочий .но так как написал
slavich, будет правильней
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
05.02.2011, 16:12     Про указатели #9
zinador, что значит рабочий. не понимаю. считаю ,что данный код, как пример работы с указателем, неприемлим.

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(){
 
    int *p;
    p = new int; // хоть с этим хоть без этого принципиальной разницы не вижу
 
    int a = 13;
    *p=a; // считаю неверным, только p=&a;
    a++;
    a++;
 
    std::cout << *p; // выведет 13. а не 15.
}
slavich
12 / 12 / 1
Регистрация: 25.10.2009
Сообщений: 32
05.02.2011, 16:19     Про указатели #10
Цитата Сообщение от no0ker Посмотреть сообщение
*p=a; // считаю неверным, только p=&a;
Почитайте про операцию * и указатели.
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
05.02.2011, 16:21     Про указатели #11
повторюсь. как учебный (!) пример - он неприемлим. конечно, в том смысле - если вы знаете, что от него ждать, проблем нет. но если ждёте поведения обычного указателя - увы.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2011, 16:30     Про указатели #12
хм странно, обычно в учебниках так пишут
C++
1
2
3
4
int x,*p
x = 10;
p = &x;
*p = 12;
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
05.02.2011, 16:56     Про указатели #13
Иными словами вот так все происходит???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int x,*p;
    x=10;
    p = &x; //В переменную p записываешь адресс x
    *p = x; //Смотришь что находится по адрессу p и заносишь туда значение x
    cout<<p<<endl<<*p<<endl; //Выводишь адресс на экран , потом выводишь на экран что расположенно по этому ажрессу
    //cout<<&x<<endl<<x<<endl; строка дублирует действия предыдущей 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
05.02.2011, 16:58     Про указатели #14
Цитата Сообщение от Novij Посмотреть сообщение
Иными словами вот так все происходит???
Все верно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2011, 16:59     Про указатели
Еще ссылки по теме:

Про указатели с использованием функции - C++
Вопросы в комментариях к коду #include &lt;iostream&gt; #include &lt;cctype&gt; #include &lt;cstring&gt; using namespace std; void...

Пояснить про указатели и ссылки - C++
есть переменное и указатель.. Значение нашей переменной случайный адрес, Как менять адрес указателя, таким образом, что бы она стала...

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

Расскажите популярно про ссылки и указатели - C++
Помогите разобраться со ссылками и указателями на различные объекты. Запутался вообще в них полностью. Когда читаю книгу про них, то вроде...

Подскажите хорошую статью про указатели и ссылки - C++
Посоветуйте статью, видео или книгу по указателям и ссылкам в C++, где все доходчиво разъяснено с реальными примерами. Уже много чего...


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

Или воспользуйтесь поиском по форуму:
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2011, 16:59     Про указатели #15
интересно зачем делать *p = x, когда это итак очевидно
Yandex
Объявления
05.02.2011, 16:59     Про указатели
Ответ Создать тему
Опции темы

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