Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Пара вопросов по С
Форумы портала PHP.SU » » Программирование на C++ » Пара вопросов по С

Страниц (1): [1]
 

1. OrmaJever - 13 Октября, 2011 - 16:32:58 - перейти к сообщению
Вобщем первое что интерисует это где можно найти описание всех функций, классов стандартных библиотек (желательно на русском), после php превык что всё собрано в одном месте, а для с++ ещё такого не нашёл.
Второй вопрос про тип char
CODE (htmlphp):
скопировать код в буфер обмена
  1. #include <iostream.h>
  2. int main() {
  3.     char aa = 'string';
  4.     cout << aa;
  5. }
  6.  

почему то выводится только "g", а если написать указатель на строку
CODE (htmlphp):
скопировать код в буфер обмена
  1. #include <iostream.h>
  2. int main() {
  3.     char* aa = "string";
  4.     cout << aa;
  5. }
  6.  

то пишет полснотью, чем отличается указатель на строку от простой строки символов? И как можно перевести из одного в другоеи обратно?
3 вопрос: как заставить програму зависнуть в памяти без командной строки. Тоесть в диспечере задач програма запущена и отображается но на экране ничего не видно?
Ну и последний вопрос где и какую литературу можно прочитать для освоения современого с++? Я читал http://valera[dot]asf[dot]ru/cpp/book/ там вроде как по синтаксису всё неплохо расписано, но ни стандартных библиотек ни всевозможной работы с ос не расписано.
2. caballero - 13 Октября, 2011 - 17:21:38 - перейти к сообщению
Цитата:
char aa = 'string';

это не строка символов а один символ
3. White - 13 Октября, 2011 - 18:25:58 - перейти к сообщению
OrmaJever пишет:
описание всех функций
msdn, если програмируете на VS. Там же есть браузер классов, методов функций...
OrmaJever пишет:
в памяти без командной строки
в виде службы или демона?
4. OrmaJever - 13 Октября, 2011 - 18:49:34 - перейти к сообщению
caballero пишет:
это не строка символов а один символ

а вот почему так? Это ограничение этого типа?
White пишет:
в виде службы или демона?

в виде демона, примерно как ддос боты Закатив глазки
Но хотелось бы увидеть и второй вариант.
White пишет:
msdn, если програмируете на VS. Там же есть браузер классов, методов функций...

нет, поставил редактор code blocks там был компилятор minGW.
5. Champion - 13 Октября, 2011 - 19:27:04 - перейти к сообщению
OrmaJever, можешь попробовать поизучать Си http://corum[dot]mephist[dot]ru/index[dot]ph[dot][dot][dot]459183&st=75 вот с этими людьми. Зная Си, с указателями проблем не будет)
(Добавление)
По поводу char aa = 'string'
1 - строки пишутся в двойных кавычках.
2 - в С++ нет массивов как таковых. Есть типы данных целый, символ, вещественный .... и есть указатели на такие же типы. Массивы - это просто указатель на первый элемент определенного типа. Так же и со строкой - это указатель на начало последовательности char - ов.
Записи a[4] и *(a+4) - эквивалентны и вернут одно и то же.
3 - в С++ есть замечательная библиотека STL, в которой реализованы классы строк, очередей, стеков, массивов и пр. При работе с этими структурами данных лучше использовать STL. Но понимать указатели надо обязательно и написать свою реализацию какого-нибудь класса STL - полезная практика.

В общем, думаю, стоит начать со ссылочки выше.
6. OrmaJever - 13 Октября, 2011 - 19:50:43 - перейти к сообщению
Champion пишет:
1 - строки пишутся в двойных кавычках.

Ладно спрошу так как раньше спрашивал про php.
В чём разница одинарных и двойных кавычек в c++? Если мы вроде как разобрались что в двойных находится строка то чтоже в одинарных?
Champion пишет:
2 - в С++ нет массивов как таковых. Есть типы данных целый, символ, вещественный .... и есть указатели на такие же типы. Массивы - это просто указатель на первый элемент определенного типа. Так же и со строкой - это указатель на начало последовательности char - ов.
Записи a[4] и *(a+4) - эквивалентны и вернут одно и то же.

Это всё прочитал и понял... хотя может и не понял... После php указатели для меня большая беда, Может есть сайт где подробно расписано про эту гадость?
Champion пишет:
3 - в С++ есть замечательная библиотека STL, в которой реализованы классы строк, очередей, стеков, массивов и пр. При работе с этими структурами данных лучше использовать STL. Но понимать указатели надо обязательно и написать свою реализацию какого-нибудь класса STL - полезная практика.

Я пока боюсь использовать типы vector, list, string потому что нету конретного описания каждого метода, и для меня бывает большим удивлением возвращаемые значения даже тех методов которые я знаю.
Блин вот хочется выучить но вся информация разбросана по интернету и иногда в таком виде что лутше её не читать.
Ах да, хотел ещё спросить разницу между
CODE (htmlphp):
скопировать код в буфер обмена
  1. char str;
  2. // и
  3. char* str = new char(10);

то что второй пример динамически выделяет память это я знаю, но разве первый пример так не делает? когда я напишу
CODE (htmlphp):
скопировать код в буфер обмена
  1. str = 'dasdas';

он так же выделит память для первый строки?
7. Champion - 13 Октября, 2011 - 20:04:28 - перейти к сообщению
OrmaJever пишет:
чтоже в одинарных?
В одинарных - одиночный символ. При чем "a" - это 2 символа - 'а' и '\0', т.е. строка из одного символа один символ - разные вещи)
OrmaJever пишет:
Блин вот хочется выучить но вся информация разбросана по интернету
В той ссылке, которую я привел, были приведены ссылки на какие-то книжки, а автор той темы, по-моему, вполне разумный человек и очень хочет других научить Си, так что вот как раз думаю, что чем лазить по инету, поучавствуй в том деянии.

OrmaJever пишет:
char str;
// и
char* str = new char(10);
В первом случае str - переменная типа Символ. Во втором - str - это указатель на Символы и указывает он на место длиной 10 Символов.
OrmaJever пишет:
str = 'dasdas';
Опять одиарные кавычки) Ничего он не выделит str останется символом.
Я раньше думал, что такая запись вообще ошибку выдаст, но вроде не выдает, судя по
OrmaJever пишет:
почему то выводится

(Добавление)
Если написать char *str = "qwerty"; То выделится память под str и в эту память поместится строка. При написании в двойных кавычках происходит такая вещь: выделяется память под qwerty, получается на нее указатель и этот указатель записывается в str.
Т.е. написать
CODE (text):
скопировать код в буфер обмена
  1. char *str = new char[10];
  2. str = "qwerty"; // это не правильно, потмоу что str уже ссылается на определенное место
  3. strcpy(str, "qwerty"); - правильно. Данные qwerty скопируются в область памяти, на которую ссылается str
  4. str[0] = 'q';
  5. *(str + 1) = 'w';
  6. ...
  7. str[6] = 'y';
  8. str[7]  =0; // так тоже можно

PS. Вероятно, могу где-то чудить)
(Добавление)
Можно сделать
CODE (text):
скопировать код в буфер обмена
  1. char *st1 = "qwerty";
  2. char *str2;
  3.  
  4. str2 = str1;
  5. str1[3] = 'e';
  6.  
  7. cout << str1 << " - " << str2 << endl;


И поразмыслить над тем, что получилось)
8. OrmaJever - 13 Октября, 2011 - 21:02:31 - перейти к сообщению
Champion пишет:
И поразмыслить над тем, что получилось)

програма вылетает вернув -1073741819. И всё это из-за строки str1[3] = 'e';
И вот как после этого понять указатели Растерялся
9. Champion - 13 Октября, 2011 - 21:13:17 - перейти к сообщению
Ээ. Я не этого результата ожидал. Видимо, мне тоже надо поразмыслить. Но завтра)
10. caballero - 13 Октября, 2011 - 21:24:02 - перейти к сообщению
Цитата:
а вот почему так? Это ограничение этого типа?

нет - это просто такой тип - символ - 1 байт


Цитата:
И всё это из-за строки str1[3] = 'e';

а как вообще компилятор пропустил
st1 объявлена а юзается str1
11. Champion - 14 Октября, 2011 - 18:39:00 - перейти к сообщению
Champion пишет:
Видимо, мне тоже надо поразмыслить.
Так. Поразмыслил. В билдере сделал такую программку - вывела так. как я и ожидал - две одинаковые строки "qweety".
Правда, если компилить с пом. g++, то на операторе = происходит segmentation fault. Точнее, происходит не если компилить, а когда запускать. Честно говоря, я не в курсе как это объяснить
12. ALEN - 14 Октября, 2011 - 19:55:22 - перейти к сообщению
Есть вообще небольшой совет, чтоб не тратить время сразу выбирай себе фрэймворк и используй его. С++ не PHP. Тем более бери фрэймворк, если будешь писать кроссплатформенные приложения. Потом все равно вникаешь в тонкости работы, просто не придется время убивать.

 

Powered by ExBB FM 1.0 RC1