Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

It is alive! - C++

15.05.2010, 12:50. Просмотров 3291. Ответов 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 зависит какой собственно символ выберется из строки. Но я совершенно не понимаю КАК это работает!?
10
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2010, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос It is alive! (C++):

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

.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 Сети
Доброго времени суток, товарищи программисты. Столкнулся с такой вот ситуацией: При попытке получить страницу сайта, используя...

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

.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 Сети
Доброго времени суток, товарищи программисты. Столкнулся с такой вот ситуацией: При попытке получить страницу сайта, используя...

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

.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 Сети
Доброго времени суток, товарищи программисты. Столкнулся с такой вот ситуацией: При попытке получить страницу сайта, используя...

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

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

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

Keep-Alive соеди

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

.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 Сети
Доброго времени суток, товарищи программисты. Столкнулся с такой вот ситуацией: При попытке получить страницу сайта, используя...


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

Или воспользуйтесь поиском по форуму:
42
easybudda
15.05.2010, 13:40     It is alive!
  #16

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Это из серии "Как сделать свой код абсолютно безумным"
Ага... Надо почаще студентам в програмки такие фортели вставлять, чтобы преподы с ума сходили...

2
Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
15.05.2010, 13:43 #17
Цитата Сообщение от easybudda Посмотреть сообщение

Не по теме:


Ага... Надо почаще студентам в програмки такие фортели вставлять, чтобы преподы с ума сходили...

Скажи практическую пользу от такого и может кому нибудь да сделаю
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.05.2010, 14:19  [ТС] #18
Цитата Сообщение от Psixodelik Посмотреть сообщение
Скажи практическую пользу от такого и может кому нибудь да сделаю
Практическая польза от такого знания.. хм.. разве что "Никогда так не делать!"
Хотя вполне возможно, что когда-то и пригодится. слышал, что на собеседованиях часто задают вопросы по типу: "что произойдет при записи i+++++i"
0
Alip
54 / 33 / 3
Регистрация: 10.03.2010
Сообщений: 85
15.05.2010, 14:23 #19
Действительно забавная штука
Новый взгляд на оператор [].
Попробовал две конструкции
C++
1
2
int a = 4;
int b = a[a];
и
C++
1
2
int a = 4;
int b = a[&a];
Работает только вторая. На первую ругается. Похоже easybudda прав. Действительно для массива нужен указатель и целое, а где их поставить неважно.
0
M128K145
Эксперт С++
8309 / 3529 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.05.2010, 21:11 #20
Цитата Сообщение от fasked Посмотреть сообщение
"что произойдет при записи i+++++i"
Подобные задания обычно осложнены битовыми операциями, и в результате выписать промежуточные результаты
0
CheshireCat
Эксперт С++
2899 / 1248 / 78
Регистрация: 27.05.2008
Сообщений: 3,414
15.05.2010, 21:29 #21
fasked, это самая тривиальная адресная арифметика. Компилятору совершенно фиолетово, с какой стороны стоит индекс, а с какой - адрес строки. Поэтому записи
C++
1
2
3
4
5
const char p = "1q96g";
const char c0 = p[i];
const char c1 = i["1q96g"];
const char c2 = "1q96g"[i];
const char c3 = i[p];
с точки зрения компилятора абсолютно эквивалентны, хотя и непривычны человеческому глазу. Можешь, кстати, этим сокровенным знанием щегольнуть где-нибудь на собеседовании/экзамене, хе-хе :-)
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.05.2010, 21:33  [ТС] #22
Цитата Сообщение от CheshireCat Посмотреть сообщение
Можешь, кстати, этим сокровенным знанием щегольнуть где-нибудь на собеседовании/экзамене, хе-хе :-)
Мы об этом как раз говорим =)
Цитата Сообщение от M128K145 Посмотреть сообщение
Подобные задания обычно осложнены битовыми операциями, и в результате выписать промежуточные результаты
результат то, как я понимаю, все равно неопределенный
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
17.08.2010, 01:35 #23
Например, есть код:
C++
1
2
int a [] = {1, 2, 3, 4};
int i = 3;
Запись a[i] труктуется как *(a + i), но *(a + i) == *(i + a), что в свою очередь эквивалентно i [a].
1
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.08.2010, 01:43  [ТС] #24
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
Запись a[i] труктуется как
ничего здесь не труктуется. это маразм.
не надо путать синтаксис языка и адресную арифметику. такой синтаксис маразм, но забавный
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
17.08.2010, 02:13 #25
То, что я написал и есть пример адресной арифметики. Это преобразовывается (можно сказать, что трактуется) в один и тот же ассемблерный код.
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.08.2010, 02:31  [ТС] #26
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
То, что я написал и есть пример адресной арифметики. Это преобразовывается (можно сказать, что трактуется) в один и тот же ассемблерный код.
при чем здесь во что это преобразовывается, мы говорим о синтаксисе языка!

я имею в виду, что можно и таких зверей создавать. и в этом тоже в некоторой степени вина синтаксиса

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   static int val = 1;
   while(val /* vanish */ --> 0)
   {
      (++ /* do black magic ! */  val) /* very black magic !!! */ ++;
      (val == 2 ? printf("WTF ??!") : val =- 1);
   }
 
   return ((!!val==!!0)?val ==- 100500?5:1:main());
}
3
easybudda
17.08.2010, 02:34
  #27

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
(!!val==!!0)
смешно

0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.08.2010, 02:36  [ТС] #28
Цитата Сообщение от easybudda Посмотреть сообщение
смешно
а это между прочим приведение к bool целых чисел !!!
надо было вот так написать:
C++
1
return ((!!val==!!false)?val ==- 100500?5:1:main());
0
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
17.08.2010, 02:40 #29
Продолжение банкета... Про синтаксис.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   static int val = 1;
   while(val /* vanish */ --> 0)
   {
      (++ /* do black magic ! */  val) /* very black magic !!! */ ++;
      (val == 2 ? printf("WTF ??!") : val =- 1);
   }
 
   if(val<-15)
       return ((1<0?/* magic */100500:500?233?33?321?2223?0:0:0:0:0:0));
 
   return ((!!val==!!false)?val ==- 100500?5:1:main());
}
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.08.2010, 02:53  [ТС] #30
а вот еще идиотизм синтаксиса. конструкция switch-while-case.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
void foo(char c) { printf("%x\n", c); }
int main()
{
   char c = 0xF; int i = 1;
   switch(c&3) 
      while((c-=4)>=0) 
      {
         foo(c>>i++); case 3:
         foo(c>>i++); case 2:
         foo(c>>i++); case 1:
         foo(c>>i++); case 0:
         i = 0;
      }
 
   return 0;
}
0
17.08.2010, 02:53
Ответ Создать тему
Опции темы

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