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

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

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

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

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

п.с. У меня есть предположнения, но я пока подожду высказывания.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2014, 12:29
Ответы с готовыми решениями:

Записать день в переменную d,месяц в переменную m, год в переменную y
Как можно получить системную дату? Мне надо записать день в переменную d,месяц...

Обьяснить задачу
Что делают 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>...

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

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
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
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
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
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
:)
Эксперт С++
4750 / 3244 / 497
Регистрация: 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

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

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

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


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

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

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