Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 08:08   #1
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
Вопрос Процедура с параметром динамическим массивом.

Привет всем, возник такой вопрос вот код:


Код:
function Ks(C :  array of string): integer;
begin
  kS := SizeOf(C);
end;
Беда такая вожу строку:

Код:
Button1.Caption := IntToStr(Ks(['20040']));
а она возвращает 4 - байта, а хотя тут 5 - байт,
как исправить это?
VintProg вне форума Ответить с цитированием
Старый 11.06.2010, 08:41   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

SizeOf возвращает размер, занимаемый в памяти переменной
в данном случае C - это указатель (pointer), в Win32 он занимает 4 байта.
Так что, всё правильно!

а что Вы хотите определить Вашим кодом?!
Сколько в массиве элементов?
это можно сделать так
Код:
High(c)- Low(c) + 1
если же, Вам зачем то понадобилась суммарная длина всех строк, то суммируйте её в цикле:
Код:
KC := 0;
 for i:=Low(c) to High(c) do
   KC := KC + Length(c[i]);

ДОБАВЛЕНО.
Кстати, то, как Вы вызываете, это не 5 элементов массива, а ОДИН!
чтобы в массиве было 5 элементов,
надо так:
Button1.Caption := IntToStr(Ks(['20040','2222','333','4','555']));

Последний раз редактировалось Serge_Bliznykov; 11.06.2010 в 08:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.06.2010, 08:50   #3
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Serge_Bliznykov
Спасибо большое, я что то про String забыл что это указатель.
VintProg вне форума Ответить с цитированием
Старый 11.06.2010, 10:02   #4
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Вот еще проблема объявляю тип:

Код:
type
 CHJ = array of string;
Код:
function Ks(C :  CHJ): integer;
begin
  kS := SizeOf(C);
end;
и это не работает:

Код:
Button1.Caption := IntToStr(Ks(['234']) );
почему?
VintProg вне форума Ответить с цитированием
Старый 11.06.2010, 10:25   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

function Ks(C : array of string): integer;
Иначе ошибку получишь. В Паскалевских языках с типами строго
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2010, 10:28   #6
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Stilet
Понял, Спасибо.
VintProg вне форума Ответить с цитированием
Старый 11.06.2010, 11:40   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

2 Stilet
А почему при
Код:
type
 CHJ = array of string;
Код:

function Ks(C :  CHJ): integer;
begin
...
end;
Ks(['234']) - не работает.
Это же вроде тот же самый тип.

-----------------------------------------------
А-а-а, сам допетрил.
['234'] = это же константа array [1..1] of string

Последний раз редактировалось Sibedir; 11.06.2010 в 11:44.
Sibedir вне форума Ответить с цитированием
Старый 11.06.2010, 12:04   #8
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Sibedir
Значит тип CHJ надо как-то по другому определить?
VintProg вне форума Ответить с цитированием
Старый 11.06.2010, 12:11   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это же вроде тот же самый тип.
В том то и дело что это уже другой тип, раз ты его явно обьявил. Это теперь тип CHJ а не Array...
Цитата:
А-а-а, сам допетрил.
['234'] = это же константа array [1..1] of string
Нет. Константы тут ни при чем
Цитата:
Значит тип CHJ надо как-то по другому определить?
Смотря что ты хочешь сделать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2010, 12:39   #10
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
Смотря что ты хочешь сделать.
Хочу чтобы можно было записивыть вот так:
с таким типом CHJ.

Код:
Button1.Caption := IntToStr(Ks(['234']) );
VintProg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление динамическим массивом abr_question Общие вопросы C/C++ 12 18.12.2009 22:01
Проблемма с динамическим массивом Arassir Помощь студентам 3 15.02.2009 12:37
Проблема с динамическим массивом dee_lv Помощь студентам 7 09.06.2008 16:58
Помогите с динамическим массивом!!!! vish25 Помощь студентам 2 31.05.2008 19:20
проблема с динамическим массивом kommunist Помощь студентам 6 11.11.2007 21:18