Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
#1

Обьяснить переменную - C++

04.04.2014, 12:29. Просмотров 476. Ответов 8
Метки нет (Все метки)

В иходниках libav есть такая структура,

C++
1
int16_t (*motion_val[2])[2];
Обрашение к ней идет такое
C++
1
motion_val[i][j][k]
Обьясните не чистому сишнику, что это за чудозверь и как с ним работать (вернуть из функции, передать по указателю в функцию, копировать)

п.с. У меня есть предположнения, но я пока подожду высказывания.
http://www.cyberforum.ru/cpp-beginners/thread565807.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2014, 12:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обьяснить переменную (C++):

Обьяснить задачу
Что делают return 24*60-m-h*60; и return 24*60-m-h*60-(float)s/60; и ...

Обьяснить код
#include <iostream> #include <string> using namespace std; class school {...

Обьяснить код
Что обозначает каждая строка когда, что за что отвечает. #include <iostream>...

Обьяснить код
Надо просто обьяснить код по строчкам что делает функция , смысл функции...

Обьяснить фрагмент кода
Сколько копий переменной var будет создано при исполнении этого фрагмента кода?...

8
don_keyhot
8 / 8 / 6
Регистрация: 02.04.2014
Сообщений: 62
04.04.2014, 13:54 #2
нука я попробую у меня таже беда с указателями
1) скобки имеют приоритет
(*motion_val[2]) - это указатель
2) справа имеем [2] - это массив из двух элементов
значит на данный момент мы имеем, что это:
массив указателей на тип int16_t из 2 элементов ?... блин, запутаешься описывать порядок слов!

идем дальше, вонутрь скобок:
*motion_val[2] -
что приоритетнее * или []?.. вроде *
3) * - значит это указатель
на
4) [2] - массив из двух элементов типа ... а какого типа-то элементы массива ... int16_t ?

в итоге:
как бы это попонятнее выразить самому не понятное

массив указателей на тип int16_t, состоящий из 2 элементов типа указатель на массив из двух элементов
фуф-ты! ну как я!
вот только боюсь что все же НЕ правильно )
ибо с приоритетами операций у меня тоже пока беда
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
04.04.2014, 13:55 #3
stima,
int16_t (* [2])[2] - массив из двух элементов типа A, где A = int16_t (*) [2].
int16_t (*) [2] - указатель на массив из двух элементов типа B, где B = int16_t
Массив из двух указателей на массив из двух int16_t, короче.
1
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
04.04.2014, 14:14  [ТС] #4
DrOffset,
впринципе я придерживался того же, но ... я не могу замапить это на отображение в памяти, и почему это непросто
int16_t **
и как это он у них получился 3-х мерный?
0
don_keyhot
04.04.2014, 14:27
  #5

Не по теме:

DrOffset, спасибо, оказывается я НЕ ошибся, хотя и случайно )

0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
04.04.2014, 14:36 #6
Цитата Сообщение от stima Посмотреть сообщение
и как это он у них получился 3-х мерный?
Указатель же.

На пальцах: есть две ячейки памяти в них содержится по указателю. Каждый из этих указателей указывает на массив. К указателю, даже если он одиночный, тоже можно применить операцию [].

motion_val[i] - получаем указатель, i изменяется от 0 до 1 включительно
motion_val[i][j] - получаем j-й массив (из 2х int16_t), диапазон j здесь неизвестен, скорее всего память выделяется динамически.
motion_val[i][j][k] - получаем значение типа int16_t, k от 0 до 1 включительно


Цитата Сообщение от stima Посмотреть сообщение
я не могу замапить это на отображение в памяти, и почему это непросто
А зачем его мапить? Задачку-то обрисуй.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
04.04.2014, 14:46 #7
http://cdecl.org/
Только int16_t на int поменять. Иначе у парсера крыша едет.
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
04.04.2014, 15:24  [ТС] #8
Задачки нету. Вопрос в том, что я немогу понять, зачем было использовать такую структуру а не просто массив указателей.
Впринципе я получил необходимый мне ответ, всем спасибо.
0
IrineK
Заблокирован
04.04.2014, 16:00 #9
Цитата Сообщение от stima Посмотреть сообщение
что это за чудозверь
Зверь вживую:

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 <iomanip>
#include <ctime>
using std::cout;
 
int main()
{   srand ((unsigned int) time (NULL));
    int (*motion_val[2])[2];
    int N = 5;
    
    int i,j,k;
    for (i = 0; i<2; i++)
        motion_val[i] = new int [N][2];
    
    for (i = 0; i<2; i++)
    {   for (j = 0; j<N; j++)
        {   for (k= 0; k<2; k++)
            {   motion_val[i][j][k] = rand()%5;
                cout << motion_val[i][j][k] << " ";
            }
            cout << "\n";
        }
        cout << "\n\n";
    }
 
    for (i = 0; i<2; i++)
        delete [] motion_val[i];
 
    std::cin.get();
    return 0;
}
0
04.04.2014, 16:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 16:00
Привет! Вот еще темы с решениями:

Обьяснить что делает программа
Уважаемым товарищи программисты объясните пожалуйста что делает эта программа....

Обьяснить программу (Принципи ее работы)
Здравствуйте! Есть программа: #include &lt;stdio.h&gt; #include &lt;memory.h&gt; ...

Оптимизировать код и обьяснить с матрицами.
Ниже предоставлены 3 кода. Я прошу вас, если это возможно, подсказать мне как...

Как обьяснить формулы в коде
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main () ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru