|
|
|
Forum Member
      
участник
Last Login: 31.12.2006 22:53
Сообщ.: 35,
Visits: 276
|
|
| Как передать функцию массив элиментов какогото типа, так что бы не указывать его размер? Т.е. у меня есть функция, которая принимает в качестве вараметра массив, но его размер динамически меняется, и определяется в лучшем случае - временем компиляции, а в реалии - временем исполнения. Попогите советом...
|
|
|
|
|
Supreme 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; }
|
|
|
|
|
Supreme 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-строками).
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.04.2007 9:22
Сообщ.: 106,
Visits: 1 209
|
|
|
|
|
|
новичок
      
участник
Last Login: 12.11.2006 13:11
Сообщ.: 9,
Visits: 12
|
|
1. Правильно советуют - можно использовать спец. элемент - маркер конца
2. Если на этапе исполниения размер массива известен, то как дополнительный параметр его можно передавать в функцию вместе с массивом
|
|
|
|