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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
stima
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
#1

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

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

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

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

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

Обьяснить код - C++
Надо просто обьяснить код по строчкам что делает функция , смысл функции удаление элемента в списке void del(int value) { ...

Обьяснить код - C++
#include <iostream> #include <string> using namespace std; class school { protected: int nomer; float staj; ...

Обьяснить код - C++
Что обозначает каждая строка когда, что за что отвечает. #include <iostream> #include <math.h> using namespace std; int main() ...

Обьяснить фрагмент кода - C++
Сколько копий переменной var будет создано при исполнении этого фрагмента кода? Каких значений будет надано этим копиям?

Обьяснить, допустим ли приведенный код - C++
Я изучаю С++ по книге Язык программирования С++.Вводный курс. Так вот там задание: Обьяснить, допусти ли этот код? Если да, то...

Народ нужно обьяснить значение - C++
1)void new_str(char s1, char s2, char s3, int N)-что делает и что обозначает эта строка???И что в этой строке обозначает new_str???? ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
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 элементов типа указатель на массив из двух элементов
фуф-ты! ну как я!
вот только боюсь что все же НЕ правильно )
ибо с приоритетами операций у меня тоже пока беда
DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
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, короче.
stima
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
04.04.2014, 14:14  [ТС]     Обьяснить переменную #4
DrOffset,
впринципе я придерживался того же, но ... я не могу замапить это на отображение в памяти, и почему это непросто
int16_t **
и как это он у них получился 3-х мерный?
don_keyhot
04.04.2014, 14:27
  #5

Не по теме:

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

DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,905
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 Посмотреть сообщение
я не могу замапить это на отображение в памяти, и почему это непросто
А зачем его мапить? Задачку-то обрисуй.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.04.2014, 14:46     Обьяснить переменную #7
http://cdecl.org/
Только int16_t на int поменять. Иначе у парсера крыша едет.
stima
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
04.04.2014, 15:24  [ТС]     Обьяснить переменную #8
Задачки нету. Вопрос в том, что я немогу понять, зачем было использовать такую структуру а не просто массив указателей.
Впринципе я получил необходимый мне ответ, всем спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 16:00     Обьяснить переменную
Еще ссылки по теме:

Можете обьяснить в программном коде с++ - C++
#include <iostream> #include <math.h> using namespace std; int main() { setlocale(0, ""); double sum; cout << "Введите...

Как обьяснить формулы в коде - C++
#include <iostream> #include <math.h> using namespace std; int main () { float a, b, c , B , A; const float pi=3.14; ...

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

Обьяснить программу (Принципи ее работы) - C++
Здравствуйте! Есть программа: #include <stdio.h> #include <memory.h> struct arrInt { char * data; int length;


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

Или воспользуйтесь поиском по форуму:
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;
}
Yandex
Объявления
04.04.2014, 16:00     Обьяснить переменную
Ответ Создать тему
Опции темы

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