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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2024, 18:44   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 670
По умолчанию Ссылка на кусок pchar

Код:
const 
  s:pchar='1234_5678';
Где-то в программе мне понадобилось только '5678'

Чтобы не загружать память второй строкой, я пытался всячески сделать константу-ссылку но ничего не получается.

Отбракованные варианты, которые не были приняты компилятором
Код:
const
  p:pointer=@s[6]
Код:
const
  w:LongWord=LongWord(s)+6
Kronos913 вне форума Ответить с цитированием
Старый 23.11.2024, 20:20   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,700
По умолчанию

Вот так работает:
Код:
const
  s:pchar='1234_5678';
begin
  writeln(s+5);
  readln;
end.
Arigato вне форума Ответить с цитированием
Старый 24.11.2024, 18:04   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 670
По умолчанию

Код:
types
  ppChar=^PChar;
Вот такого типа переменная входит в процедуру.

И для этого нужно сделать какую-то промежуточную константу, которая содержит это s+5
Kronos913 вне форума Ответить с цитированием
Старый 24.11.2024, 18:18   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,700
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
И для этого нужно сделать какую-то промежуточную константу, которая содержит это s+5
Зачем это нужно? s+5 и так константа, так как s константа и 5 константа.
Arigato вне форума Ответить с цитированием
Старый 26.11.2024, 02:15   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,906
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
ppChar=^PChar;
Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Вот такого типа переменная входит в процедуру.
Такого извращения я ещё не встречал! Указатель на указатель PChar.
Не взлетит ваша ракета, Kronos913, с такими извращениями.
northener вне форума Ответить с цитированием
Старый 26.11.2024, 10:05   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,700
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Такого извращения я ещё не встречал!
Видимо, вы не открывали другие темы от Kronos913. Там и не такое извращение можно найти! Более того, отмечу, что кроме всевозможных извращений вы больше ничего в его темах и не найдете
Arigato вне форума Ответить с цитированием
Старый 26.11.2024, 12:03   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,664
По умолчанию

Ну это как-то разряжает сухую академичность осмысленных вопросов-ответов. "В каждой роте для потехи существуют зампотехи". А тут вот ... Ну ещё апологет супер-гипер-ультра-высокоуровневого языка (ну вы знаете). Да ещё был jura_k со своими мангами, затерялся где-то.

Последний раз редактировалось digitalis; 26.11.2024 в 12:08.
digitalis вне форума Ответить с цитированием
Старый 29.11.2024, 00:32   #8
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 670
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Такого извращения я ещё не встречал! Указатель на указатель PChar.
Не взлетит ваша ракета, Kronos913, с такими извращениями.
делаю короткий тестовый код
Код:
Procedure aaa(const p:pchar);
begin
  Form1.Memo1.Lines.Add(IntToStr(Integer(@p)));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  p:pchar;
begin
  p:='1';
  Memo1.Lines.Add(IntToStr(Integer(@p)));
  aaa(p);
end;
И в мемо оказываются два разных числа

Потому я и делаю в программе ссылку на pchar - чтобы гарантировать отсутствие лишнего дублирования строки

p.s. var - не подходит. Потому что часто ссылку нужно сделать на константу

Последний раз редактировалось Kronos913; 29.11.2024 в 00:35.
Kronos913 вне форума Ответить с цитированием
Старый 29.11.2024, 06:50   #9
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,852
По умолчанию

не покатит скопировать всё, что после символа _ ?
Код:
memo1.Lines.Add(Copy(s,Pos('_',s)+1,Length(s)-Pos('_',s)));
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 29.11.2024, 09:28   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,535
По умолчанию

Цитата:
И в мемо оказываются два разных числа
а почему там должно быть одно, если выводите
адрес ПЕРЕМЕННОЙ integer(@p);
а не адрес строки pointer(p);
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка внутри массива pchar Kronos913 Общие вопросы Delphi 1 16.11.2024 13:29
Динамическая ссылка или корректная ссылка при смещающихся строках ser-vin Microsoft Office Excel 3 11.04.2019 22:54
PChar Superlotles Помощь студентам 15 09.10.2009 10:16
PChar Роман Радер Общие вопросы Delphi 2 02.11.2008 18:50
Access violation на строке вида StrLCopy(PChar(st1),PChar(st2),10); malor Общие вопросы Delphi 1 11.07.2007 13:39