KiQ
ээмм.. а указателю как такое передать?
у меня например есть массив DATA[ i*3], хочу сделать указатель eDATA=>DATA[ 1::3 ], то есть сослаться на каждый третий элемент.
Какова практическая цель этой вырезки массивов?
Ну я понимаю, к примеру, если у нас массив объявлен как byte, а на самом деле там дрова лежатвекторы хранятся. И вот мы значит, сначала преобразовываем указатель во флоат, а потом двигаем его на 12 байт.
Для этого? Или есть еще какие-то неочевидные мне кейсы?
Дядя Миша писал: Или есть еще какие-то неочевидные мне кейсы?
Массив координат xyzxyzxyzxyzxyzxyzxyzxyzx...
Надо осуществить операции только над z-компонентами.
Мне это сразу пришло на ум, потому и предложил делать += 3 в цикле, сдвигая указатель на 3 флоата.
ну почти в точку. у меня массив макрчастиц [электрон;ион;атом;электрон;ион;атом;электрон;ион;атом] по электронам и ионам всё время бегаю, а атомы медленные и на электромагнитные поля им пофиг, зато их много, поэтому их обход делаю через некоторое большое количество циклов, ну и очень удобно иметь псевдонимы.
а насчёт общей области памяти для нескольких функций -- как
это реализуется?
Дядя Миша http://www.math.spbu.ru/user/rus/cl...r2.3.shtml#2.39
мм.. ну у меня вот так:
program main
...
[описание переменных и констант]
...
allocate( gArray( ixMin:ixMax,iyMin:iyMax ) )
allocate( pArray( ipMax*3,Cells ) )
...
далее тело программы, а потом блок
contains
subroutine1()
subroutine2()
... - все описанные в этом блоке подпрограммы могут напрямую обратиться к gArray, pArray и любой другой переменной из основной программы.
endprogram main
ну и, естественно, внешним подпрограммам их пришлось бы передавать в качестве параметров и их было бы тогда очень много.
в C такое как сделать? я просто даже не знаю как такое называется, чтоб запрос в гуугле составить.
thambs писал: ну и, естественно, внешним подпрограммам их пришлось бы передавать в качестве параметров и их было бы тогда очень много.
У моего шефа в функциях на фортране в среднем по 15-20 аргументов. Ему норм.
Цитата:
thambs писал: в C такое как сделать? я просто даже не знаю как такое называется, чтоб запрос в гуугле составить.
В С (и во всех нормальных языках, даже в ассемблере) такое по умолчанию. Называется "глобальные переменные".
Если они в другом файле объявлены - тогда им надо прописать класс памяти extern.
Дядя Миша
В привычном нам виде - нет.
Есть коммон-блоки, но их надо в каждой функции переобъявлять, ну примерно как в похапе.
Это как если бы в С надо было каждую глобальную переменную объявлять в функции с ключевым словом extern.