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

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

Войти
Регистрация
Восстановить пароль
 
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
#1

Что обозначает данный код? - C++

07.06.2011, 17:38. Просмотров 624. Ответов 5
Метки нет (Все метки)

Подскажите, пожалуйста, как пояснить строки 4 и 5 в коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream.h>
char& last (char* s)
{
while (*++s);
return*(--s);
}
void main()
{
char s[]="12345";
last(s)='9';
cout<<s<<"\n";
system("pause");
}
и вот это (это вроде бы меняются местами две переменные, но что обозначает треугольный значок, если можно поясните):
a^=b^=a^=b;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2011, 17:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что обозначает данный код? (C++):

Что делает данный код? - C++
for (int i = 0; i&lt;s1.length(); i++) if (s2.find(s1) != string::npos) cout &lt;&lt; s1;

Что делает данный код? - C++
#include &lt;iostream&gt; #include &lt;queue&gt; using namespace std; int main() { queue &lt;int&gt; x1; queue &lt;int&gt; x2; queue &lt;int&gt;...

Скажите, что делает данный код? - C++
Решил немного поэкспериментировать и столкнулся с чем-то новым и непонятным для меня. Что делает этот код? Что он выводит и в зависимости...

Что делает данный код и зачем такое кому-нибудь может понадобиться? - C++
Я ответил на вопрос,но точной формулировки не нашёл,хотел бы свериться(приложения с ответами нет).Задание: Чёрный ящик.Что делается в...

Нюансы синтаксиса: подробно объяснить, что означает данный код (variadic templates) - C++
Как понять эти строки? template &lt;typename T, typename ...types&gt; void printTypes(T, types... t) { std::cout &lt;&lt; NameOf&lt;T&gt;::value...

Обьясните пожайлуста как и что делает данный оператор в этом выражении fState [x][y] ^= 1;. Неполный код привожу ниже. - C++
Вот код программы из книжки Ч. Петзолд (Програмирование для Windows® 95) #define DIVISIONS 5 ... ... LRESULT CALLBACK WndProc(HWND...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.06.2011, 17:43 #2
Цитата Сообщение от aquarius-a Посмотреть сообщение
while (*++s);
return*(--s);
Пока указатель не указывает на конец строки сдвигаем его, и возвращаем его декрементированное значение. Фактически получаем последний символ. Только тут не учли, что длина строки может быть равна нулю...
a^=b^=a^=b
Расшифровывается так
a=a^b;
b=a^b;
a=a^b;
^ - это побитовое исключающее или.
1
MaXiDRoM_90
11 / 11 / 1
Регистрация: 21.03.2010
Сообщений: 47
07.06.2011, 18:22 #3
Чуть понятнее:
^ - это операция XOR=побитовому сложению величин.
Если a представляется в битовом виде 0110,b как 1010,то результатом ^ будет 1100
0
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
08.06.2011, 22:47  [ТС] #4
всем большое спасибо!
0
x-positive
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 21
09.06.2011, 02:10 #5
Цитата Сообщение от aquarius-a Посмотреть сообщение
C++
1
2
3
char& last
(*++s);
*(--s);
Я хочу задать такой вопрос: Почему мы используем в первой строке & мы же вроде изменим адрес а не значение?
И почему в строке (*++s); мы ставим * в скобках, а уже в следующей строке за скобками?
Ну тут я ещё могу понять, приоритеты, порядок исполнения.
Но вот ещё: почему когда я пытаюсь вместо конструкции
C++
1
while (*(s++) == *(s1+)) {...}
использовать
C++
1
while(*(s) == *(s1)) {*(s++); *(s1++);...}
или
C++
1
while(*(s) == *(s1)) {(s++); (s1++);...}
то она становится не работоспособной и цикл зацикливается.
Кто может мне объяснить разницу, чтобы я смог правильно пользоваться указателями.

Буду очень благодарен.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.06.2011, 05:02 #6
Цитата Сообщение от x-positive
Почему мы используем в первой строке &
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
char &f(char s[])
{
    return *(s + 3);
}
 
int main()
{
    char s[] = "1234";
    cout << s << endl;
    f(s) = 'x';
    cout << s << endl;
    return 0;
}
Код
[guest@localhost tests]$ ./t
1234
123x
[guest@localhost tests]$
это к адресу не имеет отношения, & - это ссылка

Цитата Сообщение от x-positive
И почему в строке (*++s); мы ставим * в скобках, а уже в следующей строке за скобками?
эти скобки относятся к while, он всегда со скобками
твой вопрос: чем *++s отличается от *(--s)
ответ: вообще ничем *(--s) можно записать как *--s
сначала делается шаг назад, потом берётся значение
возвращается не копия значения, а ссылка на конкретный объект, в котором хранится значение

Цитата Сообщение от x-positive
C++
1
*(s)
зачем писать скобки, если это то же самое, что и *s

Цитата Сообщение от x-positive
Но вот ещё: почему когда я пытаюсь вместо конструкции
C++
1
    while (*(s++) == *(s1++))
C++
1
    while (*s++ == *s1++)
аналог

как ты думаешь, при каком условии заканчивается этот цикл ?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2011, 05:02
Привет! Вот еще темы с ответами:

Что обозначает -> - C++
Что обозначает -&gt; ? например top -&gt;value = c;

ERROR что обозначает ошибка - C++
Что обозначает такие ошибки и как их справить ERROR требуется выражение ERROR требуется указать на функцию(Указатель функции) ERROR...

Что обозначает этот инкремент ? - C++
znaiu chto zasmeete novichka za etot vopros no chto oznachaet podobnii increment? : int x = 5; x+=x; // eto znaiu chto oznachaet : ...

Нюансы синтаксиса C++ - что обозначает запись *= - C++
Здравствуйте, дорогие форумчане. Это, скорее всего, глупый вопрос, но можете объяснить немного использование таких вот идей: ret *= i ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.06.2011, 05:02
Ответ Создать тему
Опции темы

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