Форум программистов, компьютерный форум CyberForum.ru

Поясните детский пример - C++

Восстановить пароль Регистрация
 
l2ded
 Аватар для l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
07.09.2012, 12:42     Поясните детский пример #1
Подскажите почему не работает.
C++
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
#include <iostream>
#include <cstdlib>
using namespace std;
void printBinary(const unsigned char val) {
    for(int i =7; i>=0; i--)
    if(val &(1<<i))
        std::cout<<"1";
    else
        std::cout<<"0";
    }
 
int main(int argc,char*argv[]){ 
    
  if (argc!=2) { // argc = 1 всегда
    cout << "Must provide a number "<<endl;
    exit(1);
   }
        double d=atof(argv[1]);//почему когда я передаю argv[1] выводит ошибку? ошибка памяти адреса?
    unsigned char*cp =reinterpret_cast<unsigned char*>(&d);
    for (int i=sizeof(double)-1; i>=0; i-=2) {
    printBinary(cp[i-1]);
    printBinary(cp[i]);
    }
    return 0;
}
argv[1] - что это такое?
массив, но мы же не указываем его размерность, но если он динамически то .... обьясните
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2012, 12:42     Поясните детский пример
Посмотрите здесь:

C++ Поясните разницу
Поясните алгоритм! C++
поясните действия C++
C++ Поясните новичку!
C++ Поясните задачу
C++ Поясните задание
C++ Поясните код
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
07.09.2012, 12:49     Поясните детский пример #2
l2ded, int main(int argc,char*argv[])
argc -колличество агрументов(вместе с именем программы) второе, это указатель на массив агрументов
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
07.09.2012, 12:50     Поясните детский пример #3
У меня приведенный код нормально работает
l2ded
 Аватар для l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
07.09.2012, 13:11  [ТС]     Поясните детский пример #4
Цитата Сообщение от Andsteadur Посмотреть сообщение
У меня приведенный код нормально работает
вот скрин
Миниатюры
Поясните детский пример  
l2ded
 Аватар для l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
07.09.2012, 13:14  [ТС]     Поясните детский пример #5
Цитата Сообщение от Invader_Zim Посмотреть сообщение
l2ded, int main(int argc,char*argv[])
argc -колличество агрументов(вместе с именем программы)
каким именем? argc = 1, всегда.

Цитата Сообщение от Invader_Zim Посмотреть сообщение
l2ded, int main(int argc,char*argv[])
второе, это указатель на массив агрументов
Вижу, что указатель, но на какой массив, что к чему не пойму.

Наверное я слишком груп, но я не могу понять.
gitarillo
 Аватар для gitarillo
716 / 516 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
07.09.2012, 13:18     Поясните детский пример #6
argv - это указатель на массив символьных указателей. Каждый указатель в массиве ссылается на строку, содержащую аргумент командной строки.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.09.2012, 13:24     Поясните детский пример #7
Цитата Сообщение от l2ded Посмотреть сообщение
каким именем? argc = 1, всегда.
значит, ты запускаешь ее без аргументов, в то же время пытаешься конвертировать второй элемент массива (которого нет) в число.

если ты запустишь так:
d:>Programma.exe
argc будет 1, и единственным элементом массива будет указатель на строку "Rrogramma.exe"
если так:
d:>Programma.exe argument0
argc будет 2, и элементами массива будут указатели на строки "Rrogramma.exe" и "argument0"
l2ded
 Аватар для l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
07.09.2012, 13:37  [ТС]     Поясните детский пример #8
Цитата Сообщение от novi4ok Посмотреть сообщение
значит, ты запускаешь ее без аргументов, в то же время пытаешься конвертировать второй элемент массива (которого нет) в число.

если ты запустишь так:

argc будет 1, и единственным элементом массива будет указатель на строку "Rrogramma.exe"
если так:

argc будет 2, и элементами массива будут указатели на строки "Rrogramma.exe" и "argument0"
А епт, я забыл, вот идиот.
в Cи массив начинается с 0.
senk.
l2ded
 Аватар для l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
10.09.2012, 11:59  [ТС]     Поясните детский пример #9
Правильно ли я сделал, просто мне кажется, что это какой-то бред.
C++
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
#include "stdafx.h"
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
void printBinary(const unsigned char val) {
    for(int i =7; i>=0; i--)
    if(val &(1<<i))
        std::cout<<"1";
    else
        std::cout<<"0";
    }
 
 
int main()
{   
    
    float f=134;
    unsigned char*cp =reinterpret_cast<unsigned char*>(&f);
    cout<<&cp<<endl;
    for (int i=sizeof(float); i>=0; i--) {
    printBinary(cp[i]);
    }
    
    system("pause");
    return 0;
}
Миниатюры
Поясните детский пример  
l2ded
 Аватар для l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
10.09.2012, 22:16  [ТС]     Поясните детский пример #10
Цитата Сообщение от l2ded Посмотреть сообщение
Правильно ли я сделал, просто мне кажется, что это какой-то бред.
C++
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
#include "stdafx.h"
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
void printBinary(const unsigned char val) {
    for(int i =7; i>=0; i--)
    if(val &(1<<i))
        std::cout<<"1";
    else
        std::cout<<"0";
    }
 
 
int main()
{   
    
    float f=134;
    unsigned char*cp =reinterpret_cast<unsigned char*>(&f);
    cout<<&cp<<endl;
    for (int i=sizeof(float); i>=0; i--) {
    printBinary(cp[i]);
    }
    
    system("pause");
    return 0;
}
Правильно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 14:31     Поясните детский пример
Еще ссылки по теме:

C++ Поясните на пальцах)
Поясните элементарность C++
поясните по #define C++
Поясните считывание C++
Поясните за рекурсию C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
11.09.2012, 14:31     Поясните детский пример #11
Одна тема, один вопрос, посты дублировать нет смысла.
Yandex
Объявления
11.09.2012, 14:31     Поясните детский пример
Ответ Создать тему
Опции темы

Текущее время: 21:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru