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

Куча вопросов.. - C++

Восстановить пароль Регистрация
 
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
11.06.2011, 14:42     Куча вопросов.. #1
В связи с последовательным изучением С++ и с параллельным при этом отсутствием рабочего подключения к Интернету у меня накопилась куча вопросов, важных и не особо, ответов на оные мой пытливый ум самостоятельно постичь не в состоянии.

0) таблица приоритетов
++i --i (префиксные инкремент и декремент)
- * & ! (унарный минус, получить значение, получить адрес, отрицание)
* / % (умножение, деление, остаток от целочисленного деления)
+ - (сложение, вычитание)
> >= < <= (больше, больше либо равно, меньше, меньше или равно)
== != (равно, не равно)
<< >> (ввод, вывод)
&& || (логическое умножение, логическое сложение)

Замечания, предложения и т.п.


1)
C++
1
2
3
4
5
6
7
int a, b, c;
 
a = 2;
b = 2;
c = 3;
 
cout << (a == b <= c);
результат 0. Если изменить значение переменной а на 1, то результат станет 1. Мои мысли относительно "почему": оператор <= по приоритету выше, чем оператор ==. Тогда результат операции b <= c - истина. Итог же выражения в целом в первом случае есть 0 (другими словами, 2 не равно 1), а во втором - 1 (так-то да, 1 равно 1). Верно рассуждаю?

2)
а.
C++
1
2
3
for (char letter='A'; letter<='z'; letter++) {
cout << letter << " ";
}
б.
C++
1
2
3
for (char letter='А'; letter<='я'; letter++) {
cout << letter << " ";
}
в.
C++
1
2
3
for (char letter='J'; letter<='г'; letter++) {
cout << letter << " ";
}
Почему работают варианты а и б, но при этом не работает вариант в?
З.Ы. В варианте б заглавная буква А - это русская буква.

3)
C++
1
2
3
4
char str[] = "маленькие буквы";
 
for (int i=0; str[i]; i++)
cout << toupper(*(str+i)) << ' ';
Функция toupper, по утверждению г-на Шилдта, преобразует строчный символ в прописной эквивалент. Однако возвращаются какие-то отрицательные целые числа.. К чему бы это? С англицкими - всё путём.
З.Ы. И, что примечательно, если добавить к этим числам 256 и привести к типу char, то получатся оригинальные буквы.

4)
Тот же г-н Шилдт с пеной у рта заставляет использовать прототипы, т.е. такие структуры

C++
1
2
3
4
5
6
7
8
9
int func(int num); //это прототип функции
    
int main() {
    func(1); //вызов функции
}
    
int func(int num) {
    return num; //объявление функции
}
Мне это ужасно не нравится. Для меня приемлимо такое построение

C++
1
2
3
4
5
6
7
int func(int num) {
    return num; //инициализация и объявление функции
}
 
int main() {
    func(1); //вызов функции
}
Поскольку и читается, и смотрится лучше и т.п. Кстати, тоже отношение у меня и к инициализации и заодно объявлению переменных. Надеюсь, стандарт не запрещает это?

5) Кстати, кто внимательно читал третий вопрос, мог заметить, что я индексирвал массив не классическим способом, а с помощью указателей. Автор книги говорил, что так оно круче выглядит, да и работает быстрее. Меня как-то особо крутизна не тревожит, важнее то, что и правда оно так порезвее, м?

6) Как на английский переводится нашенский "указатель"? Просто у меня привычка есть. Хз, мб не хочу казаться быдлокодером, но все управляющие переменные в for'ах у меня называются i (благо, локальные они в пределах цикла, чо), все названия массивов содержут arr, да и вобще стараюсь использовать инглиш для именования переменных и прочей..

Добавлено через 3 минуты
7) Недавно таки научился пользоваться Free Compiler 5.5 от Borland'a. Всё бы хорошо, но он заставляет использовать вместо main() функцию _tmain(). Можетк объяснить почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2011, 14:42     Куча вопросов..
Посмотрите здесь:

C++ что такое КУЧА?
Стек и куча C++
биномиальная куча C++
C++ Стек и куча
Что такое куча C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nursik77
 Аватар для Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
11.06.2011, 14:50     Куча вопросов.. #2
Пункт 0 и 1 нужно постичь самому, вот для большего понимания представляю вам таблицу логических операторов: && и ||
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h> 
#include<conio.h>
main()
{ 
int i,j;
clrscr();
printf("Logic operators && and || \n\n");
for(i=0;i<2;i++) 
   for(j=0;j<2;j++)
  { 
     printf("%d && %d = %d ",i,j,i&&j); 
     printf("  %d || %d = %d\n\n",i,j,i||j);
   }
getch();
}
Логические операторы >,>= и <,<=
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h> 
#include<conio.h>
main()
{ 
int i,j;
clrscr();
printf("Logic operators >,>= and <,<= \n\n");
for(i=0;i<2;i++) 
   for(j=0;j<2;j++)
  { 
     printf("%d > %d = %d ",i,j,i>j);
     printf("  %d >= %d = %d",i,j,i>=j);
     printf("   %d < %d = %d",i,j,i<j);
     printf("    %d <= %d = %d\n\n",i,j,i<=j);
   }
getch();
}
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.06.2011, 14:55     Куча вопросов.. #3
2)Если использовать char, то у русских букв будет отрицательное значение. Таким образом условие истинно с самого начала. Вообще это platform-specific вроде..
3)Думаю, что тоже самое. В toupper передается отрицательное число. Если вы про то, что выводятся числа - toupper принимает int и возвращает int. Используйте явное приведение типов.
4)В некоторых случаях, например при косвенной рекурсии прототипы необходимы.
6)pointer
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
11.06.2011, 15:01  [ТС]     Куча вопросов.. #4
А что такое platform-specific?

Добавлено через 1 минуту
Зависит от платформы?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.06.2011, 15:03     Куча вопросов.. #5
Зависит от платформы.
Т.е. на одной платформе может быть одно, на другой - другое. Т.к. сижу под линуксом, то на счет винды не уверен
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
11.06.2011, 15:10  [ТС]     Куча вопросов.. #6
Угу, в целом вроде всё понятно. Только вот насчёт пятого вопроса.. Действительно ли более предпочтительно использовать указатели при индексации массивов?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.06.2011, 15:12     Куча вопросов.. #7
Читал в книге Страуструпа, что перебор с помощью указателей и индексов одинаков по скорости, и выбор между ними нужно делать не из соображений скорости...
Вот
Не существует фундаментальных причин, по которым одна из этих версий кода была бы эффективнее другой. Современные компиляторы должны превращать оба варианта в одинаковые фрагменты машинного кода. Программисты вольны выбирать между ними, исходя из логических или эстетических соображений.
Nursik77
 Аватар для Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
11.06.2011, 15:13     Куча вопросов.. #8
Я бы сказал, круче и короче.
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
11.06.2011, 15:33  [ТС]     Куча вопросов.. #9
Ясно. Ну а насчёт _tmain() можно сказать, что это причуды компилятора?

Добавлено через 8 минут
Ясно. Ну а насчёт _tmain() можно сказать, что это причуды компилятора?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,621
Записей в блоге: 1
11.06.2011, 15:40     Куча вопросов.. #10
Цитата Сообщение от ramses Посмотреть сообщение
Ясно. Ну а насчёт _tmain() можно сказать, что это причуды компилятора?
Поддержка UNICODE.. на самом деле _tmain() это wmain() или main()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2011, 15:57     Куча вопросов..
Еще ссылки по теме:

Отладка программы, куча ошибок C++
Куча непонятных ошибок C++
Повреждена куча C++

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

Или воспользуйтесь поиском по форуму:
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
11.06.2011, 15:57  [ТС]     Куча вопросов.. #11
Хм. При компиляции я указываю ключ -tWU, отвечающий за поддержку юникода. Следовательно, это лишнее?

Добавлено через 4 минуты
А с другой стороны, без него не работает.. Не важно. Всем спасибо.
Yandex
Объявления
11.06.2011, 15:57     Куча вопросов..
Ответ Создать тему
Опции темы

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