Вопрос-Ответ (C++)
|
|
Kornival | Дата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1 |
The Witcher
Сейчас нет на сайте
| Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.
Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
|
|
| |
Нохчи | Дата: Четверг, 08 Марта 2012, 21:11 | Сообщение # 121 |
заслуженный участник
Сейчас нет на сайте
| Да. Мог бы проверить.
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Четверг, 08 Марта 2012, 21:12 |
|
| |
Animan2010 | Дата: Суббота, 10 Марта 2012, 16:02 | Сообщение # 122 |
постоянный участник
Сейчас нет на сайте
| Зачем нужны указатели и почему я почти нихрена в них не понял?) Ну да, быстродействие получше, но в руках неопытного юзера можно ось свалить)
Anima Games Animan Publishing
|
|
| |
clidi | Дата: Суббота, 10 Марта 2012, 16:10 | Сообщение # 123 |
почетный гость
Сейчас нет на сайте
| Animan2010, Не понял, так как плохо читал учебники по c++. Почти в любом учебнике есть про указатели, там все разжевано. Пара ссылок: pointers pointers
Сообщение отредактировал clidi - Суббота, 10 Марта 2012, 16:17 |
|
| |
Нохчи | Дата: Суббота, 10 Марта 2012, 16:26 | Сообщение # 124 |
заслуженный участник
Сейчас нет на сайте
| Quote (Animan2010) Зачем нужны указатели и почему я почти нихрена в них не понял?) Ну да, быстродействие получше, но в руках неопытного юзера можно ось свалить) Скорость не при чем. Дело в гибкости.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Gavolot | Дата: Суббота, 10 Марта 2012, 16:56 | Сообщение # 125 |
Последователь Тени
Сейчас нет на сайте
| Я вроде почти все понял связанное с ними. Например можно присвоить с помощью них один массив другому) Я вроде не опытный, но ось не сломал. А ошибки с указателями были, но Dev-C++ просто отказывался компилировать подобные ошибки. Например я пытался присвоить указатель массива двух мерного к указателю одномерного, так программа просто не сработала и вылетела. Скорее всего свалить ось можно чем-то посерьезней или это просто было справидливо для старых систем. Добавлено (10.03.2012, 16:56) --------------------------------------------- Работаю на XP, но при подобной ошибке (которая считается серьезной) просто появлялось окошко "отправить отчет" или просто вылетала программа, мгновенный вылет, т.е. компиляция произошла, но было падение программы. Так-же были ошибки типо такого обьявил int i; Но забыл присвоить ей число и программа упала когда пытался присвоить i.
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |
Нохчи | Дата: Суббота, 10 Марта 2012, 16:58 | Сообщение # 126 |
заслуженный участник
Сейчас нет на сайте
| Gavolot, мне кажется Animan образно говорил насчет "свалить ос", разумеется из user-mode ос свалить нельзя.
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Суббота, 10 Марта 2012, 16:58 |
|
| |
Gavolot | Дата: Суббота, 10 Марта 2012, 17:03 | Сообщение # 127 |
Последователь Тени
Сейчас нет на сайте
| Кстати в книге написано, что выход за пределы массива так-же валит систему, но нет просто появлялась ошибка "отправить отчет". Повторил заход за массив 4 раза. А в книге написано, что система может слитеть)) Так-что я не думаю, что простые манипуляции с указателями или массивами приведут в наши дни к слету системы. На Nt или 95-98 может быть, но на XP и выше врятле.
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |
Нохчи | Дата: Суббота, 10 Марта 2012, 17:20 | Сообщение # 128 |
заслуженный участник
Сейчас нет на сайте
| Quote (Gavolot) Кстати в книге написано, что выход за пределы массива так-же валит систему В книге все правильно написано. Просто windows обрабатывает исключения происходящие в режиме пользователя. Если бы писал драйвер на С++ и вышел за пределы массива, получил бы BSOD
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Комиссар | Дата: Суббота, 10 Марта 2012, 23:45 | Сообщение # 129 |
заслуженный участник
Сейчас нет на сайте
| Только-только начал самостоятельно изучать С++. Обучаюсь по книге Либерти "C++ за 21 день". Использую компилятор Borland C++ 6. Столкнулся с такой проблемой: сама программа компилится верно, но при запуске программы DOSовское окно остаётся открытым лишь какие-то доли секунды, и тут же закрывается. В учебнике о возможности возникновения такой проблемы нет ни слова. Вопрос: Где и как можно задать время отображения DOSовского окна? Можно ли это сделать в этом компиляторе, или нужен другой? И как изменить вид файла .cpp, чтобы отображались номера строк (мне так удобней, а по умолчанию на месте цифр лишь пустая колонка)?
|
|
| |
Coment | Дата: Воскресенье, 11 Марта 2012, 00:15 | Сообщение # 130 |
почетный гость
Сейчас нет на сайте
| Перед последней "}" в коде напиши system ("pause"); задержка окна.
А нумерация строк зависит от используемой среды разработки. В блокноте не найдешь пока сам не пропишешь каждую.
|
|
| |
Комиссар | Дата: Воскресенье, 11 Марта 2012, 15:41 | Сообщение # 131 |
заслуженный участник
Сейчас нет на сайте
| Quote (Coment) Перед последней "}" в коде напиши system ("pause"); задержка окна. Спасибо, помогло, только в моём случае это надо вводить ещё раньше, перед
|
|
| |
goldsphere | Дата: Среда, 14 Марта 2012, 12:34 | Сообщение # 132 |
заслуженный участник
Сейчас нет на сайте
| Всем привет.Я начинающий в С++.Хотя скорее не в С++ А в среде разработки Visual C++.До этого я работал в Dev C++.Так что самые основы языка я знаю.Я сегодня установил Microsoft Visual C++ 2010 Express.Решил испытать.Создал проэкт -> Win32 -> консольное приложение.Ввёл код:
Code #include "stdafx.h" #include <iostream> #include <conio.h>
int main() { std::cout<<"Я в Visual C++"<<std::endl; return 0; _getch(); system("pause"); } #include "stdafx.h" - стояло изначально я не знаю, что этоm, но без этого не работает. Так вот в чём проблема.У меня программа открывается и сразу закрывается, даже после того как я поставил system("pause");В чём проблема?
FinderX - Android Аркада
Сообщение отредактировал goldsphere - Среда, 14 Марта 2012, 12:39 |
|
| |
Vq_Set | Дата: Среда, 14 Марта 2012, 12:54 | Сообщение # 133 |
частый гость
Сейчас нет на сайте
| goldsphere, Create -> Project -> Win32 -> Win32 Console Application -> Name/Sourse -> Empty project Code #include <iostream> using namespace std;
// Если хочешь, чтобы писало на русском раскоментируй следующую строку. // locale::global(locale(""));
int main() { cout << "Я в Visual C++" << endl; return 0; }
Компилировать код клавишами Ctrl + F5
|
|
| |
Нохчи | Дата: Среда, 14 Марта 2012, 12:59 | Сообщение # 134 |
заслуженный участник
Сейчас нет на сайте
| goldsphere, попробуй до возврата из main вписать 2-3 раза getchar(). Должно помочь
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Среда, 14 Марта 2012, 12:59 |
|
| |
goldsphere | Дата: Среда, 14 Марта 2012, 13:36 | Сообщение # 135 |
заслуженный участник
Сейчас нет на сайте
| Всё работает.Надо было _getch(); ставить перед return 0;
FinderX - Android Аркада
|
|
| |
Racot | Дата: Среда, 14 Марта 2012, 14:02 | Сообщение # 136 |
постоянный участник
Сейчас нет на сайте
| Quote (goldsphere) #include "stdafx.h" - стояло изначально я не знаю, что этоm, но без этого не работает. Так вот в чём проблема.У меня программа открывается и сразу закрывается, даже после того как я поставил system("pause");В чём проблема?
Вот
Специалист "во всем" - специалист "ни в чем" ------------------------------------ Script Reference для Unity3D Помогу со скриптами for Unity3D
|
|
| |
goldsphere | Дата: Среда, 14 Марта 2012, 14:30 | Сообщение # 137 |
заслуженный участник
Сейчас нет на сайте
| Racot, Спасибо, я уже во всём разобрался, но из видео извлёк кое-что полезное.+
FinderX - Android Аркада
|
|
| |
warzes | Дата: Четверг, 15 Марта 2012, 06:17 | Сообщение # 138 |
участник
Сейчас нет на сайте
| Quote (Animan2010) Зачем нужны указатели и почему я почти нихрена в них не понял?) Немного может и поздно, но тем не менее будет полезно. Есть два вида памяти - стек и куча. Вот это помещает переменную в стек. А вот это помещает в кучу. Так вот, прикол в том что стек ограничен, на винде он всего лишь равен... - одному мегабайту!!! Тогда как куча равна вашей оперативной памяти
Почему-то в книгах об этом не пишут, и даже многие опытные программисты об этом просто не знают. Хотите убедится? Запустите этот код: Code #include <iostream> #include <stdlib.h>
// 12 байт struct sKey { int wc; int state; int mod; };
int main() { sKey key[85467];
//int s = 0;
std::cout << sizeof(key);
system("PAUSE"); return 0; } Работает? Снимите коментарий с s (или добавьте один элемент в массив - то есть 85468). Уже не работает. Тот же пример с указателем Code #include <iostream> #include <stdlib.h>
// 12 байт struct sKey { int wc; int state; int mod; };
int main() { sKey *key = new sKey[85467];
int s = 0;
delete[] key;
system("PAUSE"); return 0; } И о чудо - он работает. Напишем sKey *key = new sKey[170934]; И снова все работает. Теперь вы понимаете зачем еще нужны указатели? Я думаю, вам не надо доказывать что 1 мб не хватит для игры?
Мой блог Вики DirectX
|
|
| |
SWFcreator | Дата: Четверг, 15 Марта 2012, 23:56 | Сообщение # 139 |
участник
Сейчас нет на сайте
| Всем привет. Интересует такой вопрос: как можно получить значение памяти, зная адрес. Вот, я присваиваю его указателю, все ок, указатель бегает по памяти без проблем, но как только пытаюсь прочитать значение, выбивает ошибку. Около захваченной в моей программе переменной все работает, но если переместить указатель подальше - нет, хотя когда как. Как я понимаю, там где работает, память ничем не использована, в остальных ячейках - значения каких-то прог. Отсюда вопрос - могу ли я в принципе получить используемую ячейку, точнее, ее значение и как?
|
|
| |
warzes | Дата: Пятница, 16 Марта 2012, 04:59 | Сообщение # 140 |
участник
Сейчас нет на сайте
| Можно пример кода, как вы это делаете? А то я не понял вопрос. Указатель хранит адрес переменной а к значению обращаются так Code int i = 27; int *pi = &i; int ni = *pi;
Quote (SWFcreator) но если переместить указатель подальше Что значит подальше? В другую функцию? Может просто объект на который указывает указатель был уже уничтожен?
Мой блог Вики DirectX
|
|
| |