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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.65
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
#1

It is alive! - C++

15.05.2010, 12:50. Просмотров 3188. Ответов 42
Метки нет (Все метки)

Как?! Как это может быть?!
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main ()
{
   int i = 4;
   char c = i["1q96g"];
   std::cout << c << std::endl;
}
Я понял как это функционирует: от значения переменной i зависит какой собственно символ выберется из строки. Но я совершенно не понимаю КАК это работает!?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2010, 12:50     It is alive!
Посмотрите здесь:

keep-alive в Qt - C++ Qt
Нарыл код простейшего однопоточного http-сервера. main: #include &lt;QCoreApplication&gt; #include &lt;qserver.h&gt; int main(int argc,...

Stayin’ Alive
Долго думала, куда написать: в форум о здоровье или в форум о музыке... Решила всё-таки в здоровье :) Песня &quot;Stayin’ Alive&quot; группы Bee...

.NET 4.x HttpClient не работает Keep-Alive - C#
Всем привет. Для запросов использую следующий метод: using (var client = new HttpClient()) { ...

HTTP GET-запрос и keep-alive - C++
Есть HTTP keep-alive соединение. Через него надо сделать серию GET-запросов. Со стороны клиента это можно сделать двумя путями: 1)...

Keep-Alive соединение и Cookie - Java Сети
Доброго времени суток, товарищи программисты. Столкнулся с такой вот ситуацией: При попытке получить страницу сайта, используя...

Alive maze. Alpha version
Приветствую! Я написал программку на С++, и мне интересно узнать ваше мнение Может быть поможете советом что-то добавить и что-то...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
19.08.2010, 22:57     It is alive! #41
Из разряда трындеца. Много букв, но интересно. Особенно интересно это запустить

Analogliterals
Mencey
147 / 94 / 7
Регистрация: 22.07.2010
Сообщений: 424
19.08.2010, 23:40     It is alive! #42
Вот что думает по этому поводу справочник по C:

Из справочника по C
Индексное выражение задает элемент массива и имеет вид:

выражение-1 [ выражение-2 ]

Тип индексного выражения является типом элементов массива, а значение представляет величину, адрес которой вычисляется с помощью значений выражение-1 и выражение-2.

Обычно выражение-1 - это указатель, например, идентификатор массива, а выражение-2 - это целая величина. Однако требуется только, чтобы одно из выражений было указателем, а второе целочисленной величиной. Поэтому выражение-1 может быть целочисленной величиной, а выражение-2 указателем. В любом случае выражение-2 должно быть заключено в квадратные скобки. Хотя индексное выражение обычно используется для ссылок на элементы массива, тем не менее индекс может появляться с любым указателем.

Индексные выражения для ссылки на элементы одномерного массива вычисляются путем сложения целой величины со значениями указателя с последующим применением к результату операции разадресации (*).

Так как одно из выражений, указанных в индексном выражении, является указателем, то при сложении используются правила адресной арифметики, согласно которым целая величина преобразуется к адресному представлению, путем умножения ее на размер типа, адресуемого указателем. Пусть, например, идентификатор arr объявлен как массив элементов типа double.

double arr[10];

Таким образом, чтобы получить доступ к i-тому элементу массива arr можно написать аrr[i], что, в силу сказанного выше, эквивалентно i[a]. При этом величина i умножается на размер типа double и представляет собой адрес i-го элемента массива arr от его начала. Затем это значение складывается со значением указателя arr, что в свою очередь дает адрес i-го элемента массива. К полученному адресу применяется операция разадресации, т.е. осуществляется выборка элемента массива arr по сформированному адресу.

Таким образом, результатом индексного выражения arr[i] (или i[arr]) является значение i-го элемента массива.



Кстати в книгах по assembler'у на эту тему я тоже что то читал там(в Assembler'e) выражение:
mov ax, bx[5]
эквивалентно:
mov ax, bx + 5

только какоето меньше весит другое быстрее выполняется!
emum
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 1
09.11.2014, 05:09     It is alive! #43
работает в силу коммутативности:
A[i] это *(A+i), учитывая что от перемены мест слагаемых сумма не изменяется, то это будет *(i+A), что в свою очередь тождественно в наешм случае i[A]
Yandex
Объявления
09.11.2014, 05:09     It is alive!
Ответ Создать тему
Опции темы

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