Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1136
от 18.10.2008, 16:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 419, Экспертов: 43
В номере:Вопросов: 3, Ответов: 6

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 146940: Чем отличается в С++ оператор i++ от ++i? Спасибо за помощь! <img src="http://rusfaq.ru/images/Forum/1.gif" border="0"> ...
Вопрос № 146967: Здравствуйте, уважаемые эксперты. Недавно начал изучение языка и при решении задач столкнулся вот с таким "граница выравнивания для типа int равна 4". Хотел узнать что ето значит? Речь идет о классах, хотя я думаю, что это не важно....
Вопрос № 147065: Здравствуйте!!! Помогите пожалуйста написать программу!! . 1. Написать функцию char* sort(char **strings, int size). Функция получает в качестве параметра указатель на массив из указателей типа char *, каждый из которых ссылается на строку...

Вопрос № 146.940
Чем отличается в С++ оператор i++ от ++i? Спасибо за помощь!
Отправлен: 12.10.2008, 17:33
Вопрос задал: Sant87 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Alexandr A. Rakunov
Здравствуйте, Sant87!
i++ - сначала вернет предыдущее значение, потом увеличится на единицу
++i - сначала увеличится на единицу, потом вернет значение
Пример:
int i = 5;
int b = i++;
// тут b = 5, i = 6
int c = ++i;
// с = 7; i = 7

Если нужно просто увеличить на единицу, то в общем случае эффективней является форма (++i)
Ответ отправил: Alexandr A. Rakunov (статус: 7-ой класс)
Ответ отправлен: 12.10.2008, 20:15

Отвечает: Vest
Здравствуйте, Sant87!
Когда используется отдельно, то ни чем:
i++;
++i;
но внутри сложных конструкций увеличение переменной происходит либо после выполнения оператора (первый вариант), либо до (второй). Например:
i = 10;
GetSomething(i++);
// GetSomething(10);
// i == 11;

i = 10;
GetSomething(++i);
// GetSomething(11);
// i == 11;

это сделано для сокращения при программировании. Но ни в коем случае не используйте конструкции вида: j = i++ + ++i - i++;
так как порядок вычисления это вещь, зависящая от компилятора... то есть ваш код не то что будет плохо читаемым (хоть и работающим у вас) но и плохо переносимым. А вообще, постарайтесь не пользоваться сишным стилем, чтобы потом не заставлять бедных программистов долго думать над вашей короткой, но сложной записью. Компьютеры сейчас не настолько плохие, чтобы усложнять себе жизнь.
До свидания
---------
"Халявы не бывает" (c)
Ответ отправил: Vest (статус: 6-ой класс)
Ответ отправлен: 13.10.2008, 18:06


Вопрос № 146.967
Здравствуйте, уважаемые эксперты. Недавно начал изучение языка и при решении задач столкнулся вот с таким "граница выравнивания для типа int равна 4". Хотел узнать что ето значит? Речь идет о классах, хотя я думаю, что это не важно.
Отправлен: 12.10.2008, 21:19
Вопрос задал: Титов Евгений (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Alexandr A. Rakunov
Здравствуйте, Губайдуллин Дамир Лутфуллович!
Это означает, что адрес, по которому int будет располагаться в памяти кратен 4.
Ответ отправил: Alexandr A. Rakunov (статус: 7-ой класс)
Ответ отправлен: 12.10.2008, 21:47
Оценка за ответ: 4

Отвечает: Olegzp
Здравствуйте, Губайдуллин Дамир Лутфуллович!
Все просто, тип int имеет размерность 4 байта, компилятор пытается оптимизировать на наилучший сбособ доступа. Для проверки размерности типа данных можно использовать SIZEOF(тип данных)
Ответ отправил: Olegzp (статус: 3-ий класс)
Ответ отправлен: 13.10.2008, 14:26
Оценка за ответ: 3

Отвечает: Vest
Здравствуйте, Губайдуллин Дамир Лутфуллович!
Дополню чужие ответы: идея такая, что в структуре (ну или классе), поля располагаются удобным для компилятора образом, точнее изменяются так, чтобы ему было уобно и быстро ими пользоваться. Размер структуры равен сумме размеров всех его полей и плюс некоторая величина которая может быть минимум равна 0. Поясняю:
допустим имеем структуру с двумя int полями. Её размер будет равен 4 + 4 = 8. Если вы первое поле поменяете на char то вы возможно ожидаете, что размер будет равен 1 + 4 = 5, или же наоборот (если второе) 4 + 1 = 5. Так вот, компилятор "выравнивает" поля структуры так, чтобы их длинна была равна по возможности длинне самого большого поля. Я, к сожалению, точно не помню порядок - это надо поспрашивать у Бьярна Страуструпа в его книге. Но просто представьте, если вы переведете два своих поля в цепочку байт, то вы обнаружите что только 5 из них несут смысловую нагрузку, а 3 - представляют собой некий мусор (или пустоту):
x x x x - - - x (первые 4 байта - это интеджер, а последний 1 - чар). В общем, помотрите информацию касающуюся aligned fields in structures. И поймете. также вы там найдете и битовые поля... тоже знаете ли интересно :)
Пока
---------
"Халявы не бывает" (c)
Ответ отправил: Vest (статус: 6-ой класс)
Ответ отправлен: 13.10.2008, 18:13
Оценка за ответ: 5
Комментарий оценки:
Вот теперь почти все понятно. Спасибо большое!


Вопрос № 147.065
Здравствуйте!!! Помогите пожалуйста написать программу!!
.

1. Написать функцию char* sort(char **strings, int size). Функция получает в качестве параметра указатель на массив из указателей типа char *, каждый из которых ссылается на строку. Функция "упорядочивает" строки в лексикографическом порядке, переставляя не строки, а указатели на них.
Для сравнения строк использовать функцию:
int strcmp( const char *string1, const char *string2 );// <string.h>
Return Value
The return value this function indicates the lexicographic relation of
string1 to string2.

Value Relationship of string1 to string2

< 0 string1 less than string2
0 string1 identical to string2
> 0 string1 greater than string2
Отправлен: 13.10.2008, 15:11
Вопрос задал: Saidart (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Verena
Здравствуйте, Saidart!
Вот вариант решения, применён алгоритм быстрой сортировки. Подробное описание алгоритма можно посмотреть в Википедии: здесь. Код в приложении.
Удачи!

Приложение:

---------
Эта история - не для истории, понимаешь?

Ответ отправила: Verena (статус: Практикант)
Ответ отправлен: 14.10.2008, 15:56
Оценка за ответ: 5


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 5.6 от 14.10.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru
RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

В избранное