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

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

Войти
Регистрация
Восстановить пароль
 
s1lver
20 / 17 / 5
Регистрация: 25.01.2012
Сообщений: 66
#1

Указатели - C++

11.03.2013, 21:42. Просмотров 367. Ответов 12
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <conio.h>
 
int main() {
    int i = 10, *p = &i;
    p++;
    std::cout << *p;
    
    getch();
    return 0;
}
По идее, программа должна вывести "14", почему она выводит 2293532, может что-то неправильно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2013, 21:42     Указатели
Посмотрите здесь:

Указатели - C++
Помогите. Код рабочей программы через простое обращение к массиву. нужно чтоб обращение было через адресацию с использованием (&amp; *)...

Указатели - C++
Нужно очень срочно. 1. Дано целое n&gt;2. Напечатать все простые числа из диапазона ; 2. Заданы 3 натуральных числа а,b,c которые...

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

Указатели - C++
Наткнулся на вот такой цикл for (char p=str; *p!=(char)0; ++p) ,поясните пожалуйста что значит *p!=(char)0

Указатели - C++
1.Заданы три натуральных числа А, В, С, которые обозначают число, месяц и год. Найти порядковый номер даты, начиная отсчет с начала года. ...

Указатели в С++ - C++
Здравствуйте...требуется помощь по следующей задаче... Задача: Создать функцию, которая возвращает количество элементов массива меньше...

Указатели - C++
int k=5; int *ukaz; ukaz=&amp;k; *ukaz=17; printf(&quot;%o\n&quot;,ukaz); printf(&quot;%o\n&quot;,k); system(&quot;pause&quot;); Может, что то я делаю не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
11.03.2013, 21:47     Указатели #2
Вы увеличили указатель. То есть, взяли следующий адрес в памяти. Он указывает куда-то в неопределенность...

Что вы хотели сделать? Почему результат должен получиться 14?!
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
11.03.2013, 21:51     Указатели #3
Цитата Сообщение от s1lver Посмотреть сообщение
По идее, программа должна вывести "14"
ну это мне вообще видится нелогичным.
Допустим ты перепутал значение указателя(адрес который он хранит в себе)
и данные, на которые он указывает(хранимые по этому адресу).
То есть хотел сделать (*p)++
Но тогда тебя должно было бы удивить отсутствие числа 11 на выходе.
при чём тут вообще может быть 14?
s1lver
20 / 17 / 5
Регистрация: 25.01.2012
Сообщений: 66
11.03.2013, 21:53  [ТС]     Указатели #4
Недавно начал изучать C++ по книге Г. Шилдта, и, как я понял по его словам, если его инкрементировать, то значение под адресом указателя будет равно предыдущему + несколько байт в зависимости от типа (т.к. int, то 4).
Croessmah
11.03.2013, 21:53
  #5

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
при чём тут вообще может быть 14?
ну как же, значение, содержащееся по указателю плюс четыре байта при p++

s1lver
20 / 17 / 5
Регистрация: 25.01.2012
Сообщений: 66
11.03.2013, 21:54  [ТС]     Указатели #6
Нет с (*p)++ я разобрался, мне интересно что будет если сам указатель инкрементировать.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
11.03.2013, 21:55     Указатели #7
Цитата Сообщение от s1lver Посмотреть сообщение
то значение под адресом указателя будет равно предыдущему + несколько байт в зависимости от типа (т.к. int, то 4)
Например, указатель "указывал на переменную" типа int(пусть будет 4 байта) с адресом 0x00000004
тогда после p++ к адресу 0x00000004 будет прибавлено 4 байта(размер типа, на который указывает) и указатель будет уже указывать на адрес 0x00000008
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
11.03.2013, 21:56     Указатели #8
так смотря ЧТО инкрементировать.
Если p++ то сам p увеличится на 4 (изначально он равен адресу, где хранится переменная i)
в этом случае, p сдвинется от i на 4 байта и будет указывать на мусор
Если (*p)++ то переменная i увеличится на 1
s1lver
20 / 17 / 5
Регистрация: 25.01.2012
Сообщений: 66
11.03.2013, 21:59  [ТС]     Указатели #9
Спасибо, ато я думал что вместо p, значение *p увеличивается.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
11.03.2013, 22:01     Указатели #10
Как-то так:
Указатели
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.03.2013, 05:54     Указатели #11
Цитата Сообщение от s1lver Посмотреть сообщение
По идее, программа должна вывести "14"
Почему имненно 14? С чего ты взял, что за переменной в памяти дожно быть ?

Добавлено через 1 минуту
Цитата Сообщение от s1lver Посмотреть сообщение
то значение под адресом указателя будет равно предыдущему + несколько байт в зависимости от типа (т.к. int, то 4).
Не по адресу указателя, а значение самого указателя, то есть сам адрес.

Добавлено через 50 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
ну как же, значение, содержащееся по указателю плюс четыре байта при p++
А при чём сдесь значение, которое по этому адресу валяется?
Croessmah
12.03.2013, 07:32
  #12

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
А при чём сдесь значение, которое по этому адресу валяется?
Пожалуйста, читайте посты внимательнее

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2013, 09:24     Указатели
Еще ссылки по теме:

Указатели!! - C++
Пользователь вводит строку с клавиатуры - предложение с пробелами и знаками пунктуации длиной до 100 символов. Вывести на экран все знаки...

Указатели С - C++
Объясните пожалуйста как получается что запись типа *(1+data) эквивалентна записи 1. Как из data получается *(1+data) и *(data+1)...

указатели - C++
Вот собственно код, проблема в том что я непойму как он работает, что именно непонятно указал в комментариях unsigned char **...

Указатели - C++
например мы имеем данный кусок кода char str=&quot;eto prostoi test&quot;; char *start; start=str; cout&lt;&lt;start; *start='b'; ...

указатели - C++
Здравствуйте! Ребят , вы не могли бы объяснить некоторые нюансы ,связанные с указателями, недалекому человеку? допустим: int N; ...


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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
12.03.2013, 09:24     Указатели #13
Цитата Сообщение от s1lver Посмотреть сообщение
По идее, программа должна вывести "14", почему она выводит 2293532, может что-то неправильно?
Все верно:
Указатели
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream.h>
 
int main(int argc, char* argv[])
{
    int i = 10, *p = &i;
 
    cout << p << endl;
    p++;
    cout << p << endl;
    p++;
    cout << p << endl;
 
 
 
    cin.ignore();
    return 0;
}
Yandex
Объявления
12.03.2013, 09:24     Указатели
Ответ Создать тему
Опции темы

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