Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    strah4

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Читал тут Страуструпа и в задачках ко второй главе нашел вроде бы простенький вопрос над которым бьюсь третий час.
     
    Напишите описание ссылки на массив из 10 целых.
     
    Указатель понятно, ссылка на целое понятно, указатель на массив вполне.
     
    Ссылка на массив непонятно. Как-то всегда без подобного обходился, очень интерестно. Попробовал 10-ок вариантов, ни один не был пропущен компилятором. Помогите теперь вы.

    Всего записей: 41 | Зарегистр. 25-02-2005 | Отправлено: 16:02 30-03-2006
    wInuX

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    strah4
     
    int (&a)[10];

    Всего записей: 155 | Зарегистр. 19-05-2005 | Отправлено: 16:23 30-03-2006
    strah4

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сенькс.
     
    А то тут уже вот такой изврат случился, хотя и красивый.
     
    typedef int mas[10];
    mas a;
    a[0]=5; // для примера
    mas &b=a;
    cout << b[0];
     
    ...выдает 5

    Всего записей: 41 | Зарегистр. 25-02-2005 | Отправлено: 16:34 30-03-2006
    lungtung

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Теперь понял. Спасибо всем!

    Всего записей: 73 | Зарегистр. 26-09-2005 | Отправлено: 16:37 30-03-2006 | Исправлено: lungtung, 16:38 30-03-2006
    HANDLE

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lungtung

    Цитата:
    Но при использоффании указатель :  
        char* string = "12345678901234567890"; // даже 20 символофф длинее "Hello world";  
        strcpy(string,"Hello world") ; //  ---> нихуя ненапрегаиццо, нах???  

     
    Советую тебе разобраться с переменными, как они объявляются, где располагаются.
    Да и с типами переменных заодно. А так же со стеком, что и когда туда помещается.
     
    char* string = "12345678901234567890";
    Не вполне корректное объявление. В данном случае string - это всего лишь указатель расположенный в стеке. В него помещается адрес строки "12345678901234567890".
    А где расположена эта строка? В секции констант. А где расположена строка "Hello world"? Там же. Более соответствующее действительности объявление будет выглядеть так:
    const char* string = "12345678901234567890";
     
    Твоя программа пытается произвести операцию записи в секцию только для чтения, за что получит "штраф" либо ещё на стадии компиляции, либо во время выполнения.
     
    char string[] = "12345678901234567890";
    strcpy(string,"Hello world") ;
     
    При таком объявлении в стек помещается уже не указатель, а массив, который будет проинициализирован. Его размер будет определяться размером инициализирующей строки.
     
    char string[100] = "12345678901234567890";
    strcpy(string,"Hello world") ;
     
    Тоже самой, только с заданным размером string (100). И учти, что если ты копируешь в локальную переменную больше, чем она может принять, то ты испортишь содержимое стека, и программа сделает "RunTime Error"
     
     
    Есть ещё один вариант - глобальные переменные.
    char string[] = "12345678901234567890";
     
    void Function()
    {
      strcpy(string,"Hello world") ;
    }
     
    Здесь переменная string уже не в стеке, а в секции переменных, куда можно что то записывать.

    Всего записей: 364 | Зарегистр. 25-02-2006 | Отправлено: 18:25 01-04-2006
    JekaCh

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    В инсте есть задача написать прогу для работы с внешним железом. Работа производится непосредственной записью в память определённых значений. Есть прога недописанная и не обладающая необходимым функционалом, но имеющая правильные мысли написанная на Delphi. Так как Borland Builder я знаю получше хотелось бы перевести нужные мне вещи на язык builder, но знаний не хватает .
    Вот как выглядит нужный мне кусок на Delphi:
    int N, MyAdress;
    BaseAdress:=$D0000; -такое же прямое указание адресса в билдере не проходит
    procedure WriteWord95(Address:integer; Value:word);
    var Data:^word; - это насколько я понял мона заменить на unsigned short *Data;
        P:pointer; - это на  void *P;
    begin
       P:=Ptr(Address); функция Ptr переводит указанный адресс в указатель, как сделать это в Билдере?
       Data:=P;
       Data^:=Value;
    end;
    MyAdress=BaseAdress+$20*N;
    WriteWord95 (MyAdress, 4);
    Как то же самое будет выглядеть в билдере? Если кто знает помогите плиз!

    Всего записей: 46 | Зарегистр. 26-08-2003 | Отправлено: 00:34 03-04-2006 | Исправлено: JekaCh, 00:38 03-04-2006
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JekaCh
    Примерно так.

    Код:
     
    typedef unsined short word;
     
    int BaseAddress = 0xD0000;
     
    void WriteWord95(int address, word value)
    {
        word* Data = Address;
        *Data = value;
    }
     
    void main(void)
    {
        int N = ?????;
        int MyAddress = BaseAddress+0x20*N;
        WriteWord95(MyAddress, 4);
    }
     
     

    Только вопрос есть. Если работаешь под Win32 кто тебя в ту память собирается пускать?

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 10:12 03-04-2006
    JekaCh

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Я уж понял что в ВыньXp ничего не выйдет но в инсте старые компы там вынь98 так что всё нормально с допуском в память . А за помощь большое спасибо завтра в инсте попробую .
    А ещё вопросик если я хочу прочитать то это будет выглядеть так?

    Цитата:
    typedef unsigned char byte;
    byte ReadByte95(int address)
    {
       byte* Data=address;
       byte result=*Data;
       return result;
    }
    ?
     
     
    Добавлено:
    Сейчас дома попробовал скомпилировать получил ошибку к строчке  word* Data = Address;  

    Цитата:
    [C++ Error] main.cpp(12): E2034 Cannot convert 'int' to 'unsigned short *'


    Всего записей: 46 | Зарегистр. 26-08-2003 | Отправлено: 17:56 03-04-2006 | Исправлено: JekaCh, 18:44 03-04-2006
    wInuX

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    JekaCh
     

    Цитата:
     ...попробовал скомпилировать получил ошибку к строчке  word* Data = Address;  

    надо добавить явное преобразование.
     
    byte* Data= (byte*)address;

    Всего записей: 155 | Зарегистр. 19-05-2005 | Отправлено: 19:30 03-04-2006
    JekaCh

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Спасибо, помогло! А по поводу чтения-то правильно я написал считывание из памяти?

    Цитата:
     typedef unsigned char byte;  
    byte ReadByte95(int address)  
    {  
    byte* Data= (byte*)address;  
    byte result=*Data;  
    return result;  
    }

    Всего записей: 46 | Зарегистр. 26-08-2003 | Отправлено: 20:19 03-04-2006 | Исправлено: JekaCh, 20:20 03-04-2006
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JekaCh
    В DOS было правильно. А Win98 - это тоже Win32. Читай про разделение адресных пространств и трансляцию логических адресов в физические. Так что скорее всего вместо доступа к железу получишь Access Violation.

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:26 03-04-2006
    perdun



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите скомпилить
     
    http://www.securitylab.ru/poc/262241.php  
     
    У меня 15 тараканов Все тапки уже порвал

    Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 02:28 04-04-2006
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    Если не ошибаюсь, у линейки Windows 9x несколько отличная от WinNT система защиты и распределения памяти. В ней туда могут и пустить. Досовские проги по крайней мере пускаются.
    JekaCh
    Действительно, забыл явно привести. Давно уже с адресами не работаю. А считывание можно и проще написать:

    Код:
     
    typedef unsigned char byte;  
    byte ReadByte95(int address)  
    {  
    return *((byte*)address);  
    }
     

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 13:28 04-04-2006
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mickey_from_nsk
    Досовские пускаются. И Win16 пускаются, как в Win 3.1. А вот Win32 приложения - фигушки.

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:26 04-04-2006
    JekaCh

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как практика показала пускает . По крайней мере в тот диапазон адресов,  который занимает под себя контроллер для которого и пишется прога.

    Всего записей: 46 | Зарегистр. 26-08-2003 | Отправлено: 11:44 05-04-2006
    linder



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    подскажите ошибку в коде на builder
     
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
            {
              }
     
    void Look ()
       {
      AnsiString CurDir = GetCurrentDir();
      TSearchRec sr;
      int iAttributes = 0;
     
     
      Form1->StringGrid1->RowCount = 1;
     // iAttributes |= faReadOnly * CheckBox1->Checked;
    //  iAttributes |= faHidden * CheckBox2->Checked;
    //  iAttributes |= faSysFile * CheckBox3->Checked;
    //  iAttributes |= faVolumeID * CheckBox4->Checked;
    //  iAttributes |= faDirectory * CheckBox5->Checked;
    //  iAttributes |= faArchive * CheckBox6->Checked;
    //iAttributes |= faAnyFile * CheckBox7->Checked;
    //  StringGrid1->RowCount = 0;
      if (!FindFirst("*.*", faAnyFile|faDirectory,sr))  // == 0)
     
      do
        {
          if(ExtractFileExt(sr.Name) == "*.*")
     
          {
     
                 Form1->ListBox1->Items->Add(sr.Name);
     
            //Form1->StringGrid1->RowCount = Form1->StringGrid1->RowCount + 1;
            //Form1->StringGrid1->Cells[1][Form1->StringGrid1->RowCount-1] = sr.Name;
     
            //Form1->StringGrid1->Cells[2][Form1->StringGrid1->RowCount-1] = IntToStr(sr.Size);
           }
        else if(sr.Attr==faDirectory && sr.Name!="." && sr.Name!="..")
          {
            SetCurrentDir(ExtractFileDir(sr.Name));
            Look ();
            SetCurrentDir(CurDir);
          }
        }
        while(!FindNext(sr));
      FindClose(sr);
      }
     
    //---------------------------------------------------------------------------
     //---------------------------------------------------------------------------
     
     
     
     
     
    void __fastcall TForm1::OKClick(TObject *Sender)
    {
    Look ();
    }
     
    //---------------------------------------------------------------------------  

    Всего записей: 141 | Зарегистр. 14-09-2005 | Отправлено: 11:32 06-04-2006
    InFanTILDA



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, подскажите пожалуйста!
    как узнать размер массива что б потом передать его размер в функцию???

    Всего записей: 5 | Зарегистр. 03-04-2006 | Отправлено: 20:35 06-04-2006
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    InFanTILDA
    Если размер на этапе компиляции известен, то просто:

    Код:
     
    int Array[100];
    ...
    int NumberOfElements=sizeof(Array)/sizeof(Array[0]);
     
     
    Если же память под массив выделяется динамически (int *Array=new int[100]), то никак. В этом случае sizeof вернёт не размер массива, а размер указателя.

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:28 06-04-2006
    mikabud

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я новичок в программировании.
    Поэтому прошу сразу не смеяться над моими вопросами.
     
     
    Вопрос:
    ни в одной книге явно не указано(или может я просто не обратил внимания)
    что означает конкретно const к примеру в такой функции:
     
    void display()const
    {
        cout<<str;
    }
    заранее спасибо за помощь

    Всего записей: 1 | Зарегистр. 07-04-2006 | Отправлено: 13:03 07-04-2006
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mikabud
    вообще то const атрибут применяется только к членам класса. Он означает, что в данном методе состояние класса не меняется. Из этого потом делается много выводов как компилятором, так и другими программистами.

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 13:11 07-04-2006
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru