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

Объясните работу кода - C++

Восстановить пароль Регистрация
 
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
12.09.2013, 22:13     Объясните работу кода #1
Здравствуйте, не могу понять работу следующего кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main()
{
    char buff[] = "0123456789";
    char* ptr = buff;
    ptr += 5;
    cout<<1+ptr++<<endl;
    cout<<++ptr[ptr-buff-5]<<endl;
    return 0;
}
Результат :
6789
8

Добавлено через 3 минуты
Хотя нет, уже понял, почему такой результат.
НЕ понятно, почему выводятся элементы массива, а не адрес расположения в памяти?
Особенности std::cout ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2013, 22:13     Объясните работу кода
Посмотрите здесь:

C++ Объясните кусок кода
C++ Объясните работу функции fread()
C++ Объясните работу программы
Объясните фрагмент кода! C++
C++ Объясните работу указателей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
12.09.2013, 22:19     Объясните работу кода #2
Цитата Сообщение от vadim09 Посмотреть сообщение
НЕ понятно, почему выводятся элементы массива, а не адрес расположения в памяти?
Особенности std::cout
Потому что указатели на массивы можно индексировать
kent
Нуб со стажем
 Аватар для kent
36 / 34 / 2
Регистрация: 19.02.2012
Сообщений: 118
12.09.2013, 22:21     Объясните работу кода #3
Цитата Сообщение от vadim09 Посмотреть сообщение
НЕ понятно, почему выводятся элементы массива, а не адрес расположения в памяти?
Особенности std::cout ?
operator << (const char* p) в ofstream выводит нуль-терминированную строку, а не значение p.
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
12.09.2013, 23:26  [ТС]     Объясните работу кода #4
Простите, а причем тут ofsream ?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
13.09.2013, 01:15     Объясните работу кода #5
оператор вывода для указателей на char перегружен и предназначен для вывода строк. Это ещё с Си пошло!
puts(ptr); или printf("%s", ptr) тоже выводили строку, а не значение указателя
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 04:08     Объясните работу кода #6
Чтобы, в данном случае, вывелся адрес, а не строка, нужно привести указатель к типу void*.
Yandex
Объявления
13.09.2013, 04:08     Объясните работу кода
Ответ Создать тему
Опции темы

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