Безразмерные массивы
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Безразмерные массивы Expand / Collapse
Автор
Сообщение
11.05.2006 9:16
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 31.12.2006 22:53
Сообщ.: 35, Visits: 276
Как передать функцию массив элиментов какогото типа, так что бы не указывать его размер? Т.е. у меня есть функция, которая принимает в качестве вараметра массив, но его размер динамически меняется, и определяется в лучшем случае - временем компиляции, а в реалии - временем исполнения. Попогите советом...
Сообщ. #896834
11.05.2006 12:15


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.09.2008 17:18
Сообщ.: 121, Visits: 2 334
Боюсь, что стандартными средствами языка никак :(

В C++ массивы в функции не передаются, передаются указатели на массивы. В противном случае, имелась бы возможность узнать размер статического массива, но никак не динамического.

Но есть кое-какой способ:

#include <stdio.h>
#include <windows.h>
void func(HGLOBAL hg)
{
  SIZE_T size = GlobalSize(hg);
  printf("size = %u",size), getchar();

  LPVOID ptr  = GlobalLock(hg);
  // some operations here with ptr...
  GlobalUnlock(hg);
}
int main()
{
  int size = 1234;//for example
  HGLOBAL hg = GlobalAlloc(GPTR,size);
  func(hg);
  GlobalFree(hg);
  return 0;
}

Сообщ. #896846
11.05.2006 14:48
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.04.2007 9:22
Сообщ.: 106, Visits: 1 209
Можно использовать динамический массив:

CArray - MFC (Visual C++)

CAtlArray - ATL (Visual C++)

DynamicArray - VCL (C++Builder/Delphi)

Ещё один вариант (возможность применения зависит от типа элементов массива) - это использовать в качестве конца массива нулевой элемент (по аналогии ASCIIZ-строками).

Сообщ. #896858
11.05.2006 14:50
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.04.2007 9:22
Сообщ.: 106, Visits: 1 209
vector - STL
Сообщ. #896859
16.06.2006 11:51


новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 12.11.2006 13:11
Сообщ.: 9, Visits: 12
1. Правильно советуют - можно использовать спец. элемент - маркер конца
2. Если на этапе исполниения размер массива известен, то как дополнительный параметр его можно передавать в функцию вместе с массивом
Сообщ. #898948
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 6:17