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

Допускается ли в С + + следующий фрагмент программы? - C++

Восстановить пароль Регистрация
 
raindeath
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 27
27.11.2013, 04:16     Допускается ли в С + + следующий фрагмент программы? #1
Допускается ли в С + + следующий фрагмент программы? Если «да» - опишите семантику этих действий; если «нет» - объясните почему.

C++
1
2
void ques (char *s1, char *s2, int n)
    { while (*s1 && *s2 && n-- && (*s1++ = *s2++)); }
И второе заданиес таким же условием:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
file f1:
    #include <stdio.h>
    extern int f(void)
    int i;
    main()
    {
        printf(“res = %d\n”, i + f() + f());
    }
    file f2;
    int f(void)
    {
        static int i = 10;
        return i--;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2013, 04:16     Допускается ли в С + + следующий фрагмент программы?
Посмотрите здесь:

C++ Помогите пожалуйста записать на С++ фрагмент программы
Составить фрагмент программы C++
C++ Составить фрагмент программы
Что делает следующий код программы? C++
C++ Разъясните пожалуйста фрагмент программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.11.2013, 05:33     Допускается ли в С + + следующий фрагмент программы? #2
Цитата Сообщение от raindeath Посмотреть сообщение
void ques (char *s1, char *s2, int n)
{ while (*s1 && *s2 && n-- && (*s1++ = *s2++)); }
Похоже на strncpy, только вот '\0' не добавляются в конце и s2 почему то не char const*.
Цитата Сообщение от raindeath Посмотреть сообщение
И второе заданиес таким же условием:
Код не корректный.
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
27.11.2013, 05:38     Допускается ли в С + + следующий фрагмент программы? #3
gray_fox, вот не понимаю, постфиксный инкремент же по старшинству выше, чем разыменование. Тогда сначала инкремент указателя должен выполниться, а потом уже разыменование. Получается, что копирование должно начаться со второго символа. Но здесь строка копируется сначала. В чём моя ошибка?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.11.2013, 05:42     Допускается ли в С + + следующий фрагмент программы? #4
StackOverflow, да, сначала происходит сам инкремент, но возвращается старое значение. Даже перегрузки этого оператора пишут часто через префиксный как
C++
1
2
3
type copy(*this);
++(*this);
return copy;
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
27.11.2013, 05:48     Допускается ли в С + + следующий фрагмент программы? #5
Понял, спасибо. А что насчёт этой конструкции *s1 && *s2 ? Для чего она здесь? Убрал я её, результат тот же.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.11.2013, 06:01     Допускается ли в С + + следующий фрагмент программы? #6
StackOverflow, да вроде не зачем.

Добавлено через 2 минуты
Хотя, если подумать: адресная арифметика для указателей определена (?) только в пределах массива, насколько я помню; тогда, если строка пуста (один завершающий '\0') и происходит инкремент, то -> выход за пределы массива... хотя вряд ли конечно, просто мысль...)

Добавлено через 8 минут
В принципе всё равно ничего страшного произойти не должно.
raindeath
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 27
27.11.2013, 18:44  [ТС]     Допускается ли в С + + следующий фрагмент программы? #7
gray_fox, так этот код правильный?
и как насчет второго?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2013, 10:49     Допускается ли в С + + следующий фрагмент программы?
Еще ссылки по теме:

C++ Используя следующий фрагмент программы,введите перечисленные ниже слова из списка С содержащие ровно две буквы d
Объяснить фрагмент программы C++
Что выведет следующий фрагмент программы и почему? C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.11.2013, 10:49     Допускается ли в С + + следующий фрагмент программы? #8
Цитата Сообщение от raindeath Посмотреть сообщение
gray_fox, так этот код правильный?
Такой код допускается.
Цитата Сообщение от raindeath Посмотреть сообщение
и как насчет второго?
Уже писал, код некорректный.
Yandex
Объявления
28.11.2013, 10:49     Допускается ли в С + + следующий фрагмент программы?
Ответ Создать тему
Опции темы

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