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

Как мне сделать выбор нужного массива? - C++

Восстановить пароль Регистрация
 
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 19:31     Как мне сделать выбор нужного массива? #1
В зависимости от условия мне нужно работать с одним или другим массивом байт. Но что-то я делаю не правильно. Как мне сделать выбор нужного массива?
C++
1
2
3
4
5
6
7
8
9
10
int SIZE;
PBYTE Mass = new BYTE[SIZE];
 
if(xx = 0) {
    BYTE Mass[] = {0x00,0x3A,0x00,0x00};
}
    else {
    BYTE Mass[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
    }
SIZE = sizeof(Mass) / sizeof(Mass[0]);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2012, 19:31     Как мне сделать выбор нужного массива?
Посмотрите здесь:

C++ Как вытащить элемент из массива не используя цикл и выбор?
Мне интересно, кто смогЁт это сделать?)) C++
Есть двумерный массив символов, в каждой строке находится номер, мне надо к каждой строке добавить "8029" как это сделать? C++
C++ Мне дана статическая квадратная матрица, как сделать ее динамической?
Как мне сделать задачу с использованием функций (блоков)? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
30.03.2012, 19:49     Как мне сделать выбор нужного массива? #2
C++
1
if(xx = 0)
0 == xx
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 20:51  [ТС]     Как мне сделать выбор нужного массива? #3
Никак не привыкну.. )))

Но все равно почему-то не выходит... Задаю хх=1, а SIZE = 4 получается, а должно быть 7 по идее...

Добавлено через 23 минуты
Как понимаю в массив ничего не прописывается... Вернее что-то туда вбивается, но не то что мне нада.. (((
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 21:05     Как мне сделать выбор нужного массива? #4
Цитата Сообщение от Битл Посмотреть сообщение
Никак не привыкну.. )))

Но все равно почему-то не выходит... Задаю хх=1, а SIZE = 4 получается, а должно быть 7 по идее...

Добавлено через 23 минуты
Как понимаю в массив ничего не прописывается... Вернее что-то туда вбивается, но не то что мне нада.. (((
ты ж заново как-то объявляешь в ифе переменную Mass. Если честно, то не совсем я понимаю это И чему равен SIZE изначально? 0? Т.е. ты создаёшь динамический массив на 0 элементов?
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 21:11  [ТС]     Как мне сделать выбор нужного массива? #5
Цитата Сообщение от Nekto Посмотреть сообщение
ты ж заново как-то объявляешь в ифе переменную Mass.
В том то и дело, что если не объявить Mass до ИФа, то он будет не инициализирован. Т.е. я его объявляю, потом в зависимости от условия наполняю... Массив получается динамическим...
Цитата Сообщение от Nekto Посмотреть сообщение
И чему равен SIZE изначально? 0? Т.е. ты создаёшь динамический массив на 0 элементов?
угу, как-то так ))
Но у меня получается что условие отрабатывает правильно, а вот массив задается на непонятные 4 байта... Никак не въеду где портачу...
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 21:20     Как мне сделать выбор нужного массива? #6
Цитата Сообщение от Битл Посмотреть сообщение
В том то и дело, что если не объявить Mass до ИФа, то он будет не инициализирован. Т.е. я его объявляю, потом в зависимости от условия наполняю... Массив получается динамическим...
угу, как-то так ))
Но у меня получается что условие отрабатывает правильно, а вот массив задается на непонятные 4 байта... Никак не въеду где портачу...
Тот Mass, который в ифе, существует только внутри { }. Ты хочешь создать на 4 или 7 элементов? Выделять память нужно после того, как ты определился, а не до.
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 21:30  [ТС]     Как мне сделать выбор нужного массива? #7
Цитата Сообщение от Nekto Посмотреть сообщение
Тот Mass, который в ифе, существует только внутри { }.
Вот блин... А как мне его использовать вне {} ???
Цитата Сообщение от Nekto Посмотреть сообщение
Ты хочешь создать на 4 или 7 элементов?
Я хочу сделать универсальный вариант... Чтоб я задавал произвольные массивы и они отрабатывали...

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int SIZE;
PBYTE Mass = new BYTE[SIZE];
 
if(xx = 0) {
    BYTE Mass[] = {0x00,0x3A,0x00,0x00};
}
    else {
    BYTE Mass[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
    }
SIZE = sizeof(Mass) / sizeof(Mass[0]);
 
for (int  i = 0; i <SIZE; i++) {
    cerr << hex << Prob[i] << endl;
}
Вывести элементы массива не выйдет по условию???
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 21:41     Как мне сделать выбор нужного массива? #8
Цитата Сообщение от Битл Посмотреть сообщение
Вот блин... А как мне его использовать вне {} ???

Я хочу сделать универсальный вариант... Чтоб я задавал произвольные массивы и они отрабатывали...
Это внутри какой-то функции будет? Что будет входящим параметром, от которого всё зависит? x?
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
29
30
31
32
33
#include <iostream>
using namespace std;
int main()
{
 int xx=1;
 int SIZE;
 char* Mass;
 if(xx == 0) 
  {
   SIZE=4;
   Mass = new char [SIZE];
   Mass[0]=0x00;
   Mass[1]=0x3A;
   Mass[2]=0x00;
   Mass[3]=0x00;
  }
 else 
  {
   SIZE=7;
   Mass = new char [SIZE];
   Mass[0]=0x00;
   Mass[1]=0x01;
   Mass[2]=0x0A;
   Mass[3]=0x84;
   Mass[4]=0x0F;
   Mass[5]=0x00;
   Mass[6]=0x00;
  }
 for (int i=0;i<SIZE;i++)
  cout<<Mass[i]<<" ";
 system("pause");
 return 0;
}
Добавлено через 2 минуты
char замени на BYTE или что там тебе надо
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 23:01  [ТС]     Как мне сделать выбор нужного массива? #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
29
30
31
include <iostream>
 
using namespace std;
 
int main()
 
{
 
 int xx=1;
int SIZE;
PBYTE Mass;
 
if(xx = 0) {
    BYTE Mass[] = {0x00,0x3A,0x00,0x00};
        SIZE = sizeof(Mass) / sizeof(Mass[0]);
}
    else {
    BYTE Mass[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
        SIZE = sizeof(Mass) / sizeof(Mass[0]);
    }
 
 
for (int  i = 0; i <SIZE; i++) {
    cout<<Mass[i]<<" ";
}
 
 system("pause");
 
 return 0;
 
}
Выводятся какие-то кракозября с массива байт. Как правильно делать вывод бай?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 23:34     Как мне сделать выбор нужного массива? #10
Цитата Сообщение от Битл Посмотреть сообщение
Выводятся какие-то кракозября с массива байт. Как правильно делать вывод бай?
C++
1
    cout<<(int)Mass[i]<<" ";
Или хз в каком ты виде хочешь это видеть.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 23:35     Как мне сделать выбор нужного массива? #11
Но я вообще не понимаю, что ты пытаешься сделать SIZE= в ифе...
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
31.03.2012, 05:29  [ТС]     Как мне сделать выбор нужного массива? #12
Ну, вот выведи у себя
C++ (Qt)
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
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
 
{
 
 int xx=1;
int SIZE;
PBYTE Mass;
 
if(xx == 0) {
    BYTE Mass[] = {0x00,0x3A,0x00,0x00};
        SIZE = sizeof(Mass) / sizeof(Mass[0]);
}
    else {
    BYTE Mass[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
        SIZE = sizeof(Mass) / sizeof(Mass[0]);
    }
 
 
for (int  i = 0; i <SIZE; i++) {
    cout<< hex<<(int)Mass[i]<<" ";
}
 
 system("pause");
 
 return 0;
 
}
Байты не совпадают. В массиве что-то есть, но не то что я ему задаю... О_о
Цитата Сообщение от Nekto Посмотреть сообщение
Но я вообще не понимаю, что ты пытаешься сделать SIZE= в ифе...
вычисляю длину массива... там ошибки вроде нет...
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
31.03.2012, 08:53     Как мне сделать выбор нужного массива? #13
Битл, созданный указатель надо бы обнулять
PBYTE Mass = nullptr; // или 0
во - вторых, PBYTE Mass и BYTE Mass[] это два разных объекта с одинаковым именем, причём второй создаётся в теле оператора if{}else{} и при выходе за его пределы удаляется из стека(насколько понимаю)
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
31.03.2012, 18:44  [ТС]     Как мне сделать выбор нужного массива? #14
Цитата Сообщение от igorrr37 Посмотреть сообщение
во - вторых, PBYTE Mass и BYTE Mass[] это два разных объекта с одинаковым именем, причём второй создаётся в теле оператора if{}else{} и при выходе за его пределы удаляется из стека(насколько понимаю)
Ок... Получается невозможно таким способом задать условие при котором выбирать с каким из массивов работать???
Есть способы решения такой задачи или нет??? Неужели нет???

В теле оператора так же вычисляется и SIZE, но при выходе его значение сохраняется...
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 19:17     Как мне сделать выбор нужного массива? #15
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
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <windows.h>
using namespace std;
BYTE* create_array(int xx,int *size)
{
 if(xx == 0)
  {
   *size=4;
   BYTE* mass=new BYTE [*size];
   BYTE mas[] = {0x00,0x3A,0x00,0x00};
   for (int i=0;i<*size;i++) cout<<(int)mas[i]<<" "; //можно удалить
   cout<<endl;                                                //можно удалить
   for (int i=0;i<*size;i++) mass[i]=mas[i];
   return mass;
  }
 else
  {
   *size=7;
   BYTE* mass=new BYTE [*size];
   BYTE mas[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
   for (int i=0;i<*size;i++) cout<<(int)mas[i]<<" "; //можно удалить
   cout<<endl;                                                //можно удалить
   for (int i=0;i<*size;i++) mass[i]=mas[i];
   return mass;
  }
}
int main()
{
 int x=0;
 int SIZE;
 BYTE* Mass=create_array(x,&SIZE);
 for (int i=0;i<SIZE;i++)
  cout<<(int)Mass[i]<<" ";
 cout<<endl;
 system("pause");
 return 0;
}
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
31.03.2012, 20:00  [ТС]     Как мне сделать выбор нужного массива? #16
А у меня получилось так...
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
29
30
31
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
int xx=0;
int SIZE;
PBYTE Mass;
 
    BYTE Mass1[] = {0x00,0x3A,0x00,0x00};
       int  SIZE1 = sizeof(Mass1) / sizeof(Mass1[0]);
 
    BYTE Mass2[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
       int  SIZE2 = sizeof(Mass2) / sizeof(Mass2[0]);
 
 
     if(xx == 0) {
 
       SIZE = SIZE1;
       Mass = Mass1;
     }
    else {       
          SIZE = SIZE2;
          Mass = Mass2;
        }   
        for (int  i = 0; i <SIZE; i++)  cout<< hex<<(int)Mass[i]<<" ";
        
          system("pause");
 return 0;
}
Спасибо за участие!
Это как-то оптимизировать можно или и так норм?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 20:13     Как мне сделать выбор нужного массива? #17
можно обращаться к Mass2\Mass1 и значения в Mass будут тоже меняться
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
31.03.2012, 22:41  [ТС]     Как мне сделать выбор нужного массива? #18
Цитата Сообщение от Nekto Посмотреть сообщение
можно обращаться к Mass2\Mass1 и значения в Mass будут тоже меняться
Ты про что? Обращаться меняя хх???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2012, 22:43     Как мне сделать выбор нужного массива?
Еще ссылки по теме:

C++ как сделать цикл, чтобы после моего действия, которое делает программа, она предлагала мне сделать его еще раз?
Как считать текст до нужного символа? C++
C++ Как сделать элемент строкового массива элементом числового массива?

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

Или воспользуйтесь поиском по форуму:
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 22:43     Как мне сделать выбор нужного массива? #19
Цитата Сообщение от Битл Посмотреть сообщение
Ты про что? Обращаться меняя хх???
Нет. Просто, если вдруг ты поменяешь значение где-то в программе из массива Mass1/Mass2, то оно поменяется и в Mass.
Yandex
Объявления
31.03.2012, 22:43     Как мне сделать выбор нужного массива?
Ответ Создать тему
Опции темы

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