|
|
  |
Из указателя получить массив с доступом по индексу в Си/С++ |
|
|
|
Jul 16 2015, 07:45
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Цитата Кто нибудь знает возможно ли организовать доступ к элементам массива по индексу, если мы получаем только указатель!? Да.
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Jul 16 2015, 08:04
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 15-08-06
Из: Москва
Пользователь №: 19 556

|
Цитата(редактор @ Jul 16 2015, 11:45)  Да. Замечательно, а могли бы привести пример!?
|
|
|
|
|
Jul 16 2015, 08:24
|
Частый гость
 
Группа: Свой
Сообщений: 126
Регистрация: 15-08-06
Из: Москва
Пользователь №: 19 556

|
Цитата(zltigo @ Jul 16 2015, 12:17)  В стиле array[][] в 'С' никак. В C++ нагородить класс можно практически для всего. Но пользоваться естественными для 'С' указателями что мешает-то??? Для сложных алгоритмов с доступом к десяткам соседних элементов наглядность кода с естественными указателями отставляет желать лучшего. Надо через неделю паузы полчаса втыкать в то что написано. Индексы существенно нагляднее, только и всего...
|
|
|
|
|
Jul 16 2015, 16:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(zltigo @ Jul 16 2015, 15:17)  В стиле array[][] в 'С' никак. Оказывается, можно, но только в С, к сожалению С++ такого не допускает. Читал вчера про VLA, увлёкся и "случайно" нашёл другое их применение. Код void func(int n, int m, int arr[n][m] ) { for( int i = 0; i < n; i++) for( int j = 0; j < m; j++) arr[i][j] = 0; // тут при вычислении адреса операнда будет учитываться размерность m }
//а так это можно применять: #define N (10) #define M (20) int buf[N][M]; void f2() { func( N, M, buf ); } А размерность n, кстати, учитываться не будет, она для вычисления адреса не нужна. Более сложные вещи можно делать комбинируя typedef (они тоже могут быть variably modified) и приведение указателей. Описано в разделе 6.7.5.2 Array declarators стандарта С.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|