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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Пара вопросов по С

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
OrmaJever
Отправлено: 13 Октября, 2011 - 16:32:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Вобщем первое что интерисует это где можно найти описание всех функций, классов стандартных библиотек (желательно на русском), после 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/ там вроде как по синтаксису всё неплохо расписано, но ни стандартных библиотек ни всевозможной работы с ос не расписано.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
caballero
Отправлено: 13 Октября, 2011 - 17:21:38
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
char aa = 'string';

это не строка символов а один символ


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
White
Отправлено: 13 Октября, 2011 - 18:25:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




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


-----
if(time()>1356048000) die();
 
 Top
OrmaJever
Отправлено: 13 Октября, 2011 - 18:49:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




caballero пишет:
это не строка символов а один символ

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

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

нет, поставил редактор code blocks там был компилятор minGW.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Champion Супермодератор
Отправлено: 13 Октября, 2011 - 19:27:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




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 - полезная практика.

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



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




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);

то что второй пример динамически выделяет память это я знаю, но разве первый пример так не делает? когда я напишу

он так же выделит память для первый строки?

(Отредактировано автором: 13 Октября, 2011 - 19:54:21)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Champion Супермодератор
Отправлено: 13 Октября, 2011 - 20:04:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




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;


И поразмыслить над тем, что получилось)
 
 Top
OrmaJever
Отправлено: 13 Октября, 2011 - 21:02:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Champion пишет:
И поразмыслить над тем, что получилось)

програма вылетает вернув -1073741819. И всё это из-за строки str1[3] = 'e';
И вот как после этого понять указатели Растерялся


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Champion Супермодератор
Отправлено: 13 Октября, 2011 - 21:13:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Ээ. Я не этого результата ожидал. Видимо, мне тоже надо поразмыслить. Но завтра)
 
 Top
caballero
Отправлено: 13 Октября, 2011 - 21:24:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
а вот почему так? Это ограничение этого типа?

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


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

а как вообще компилятор пропустил
st1 объявлена а юзается str1


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Champion Супермодератор
Отправлено: 14 Октября, 2011 - 18:39:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Champion пишет:
Видимо, мне тоже надо поразмыслить.
Так. Поразмыслил. В билдере сделал такую программку - вывела так. как я и ожидал - две одинаковые строки "qweety".
Правда, если компилить с пом. g++, то на операторе = происходит segmentation fault. Точнее, происходит не если компилить, а когда запускать. Честно говоря, я не в курсе как это объяснить
 
 Top
ALEN Модератор
Отправлено: 14 Октября, 2011 - 19:55:22
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Есть вообще небольшой совет, чтоб не тратить время сразу выбирай себе фрэймворк и используй его. С++ не PHP. Тем более бери фрэймворк, если будешь писать кроссплатформенные приложения. Потом все равно вникаешь в тонкости работы, просто не придется время убивать.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на C++ »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB