Воскресенье, 17 Ноября 2024, 03:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-Ответ (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"); задержка окна.

Спасибо, помогло, только в моём случае это надо вводить ещё раньше, перед
Code
return 0;
smile


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(). Должно помочь wink

Многие вопросы по 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

int i=0;

помещает переменную в стек.
А вот это
Code

int *i= new int(0);

помещает в кучу.
Так вот, прикол в том что стек ограничен, на винде он всего лишь равен... - одному мегабайту!!! Тогда как куча равна вашей оперативной памяти

Почему-то в книгах об этом не пишут, и даже многие опытные программисты об этом просто не знают. Хотите убедится?
Запустите этот код:
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
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг