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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2020, 22:40   #1
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию Что означает @?

Давно работаю с Дельфи, но такое раньше не встречал.

Пример:
Код:
function GetLocalComputerName: string;
var
  Size: dword;
  Buf: array [0..MAX_COMPUTERNAME_LENGTH + 1] of char;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  GetComputerName(@Buf, Size);   { <--- в этой строке }
  if Size > 0 then
    Result := Buf
  else
    Result := '';
end;
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 12.08.2020, 23:47   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Это адрес переменной.
Arigato вне форума Ответить с цитированием
Старый 13.08.2020, 15:49   #3
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

А почему в примере выше, если заменить строку на без @, то работает аналогично?

Код:
GetComputerName(Buf, Size);
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 13.08.2020, 17:44   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Потому что Buf статический массив.
Но грамотно в таких случаях писать
Код:
GetComputerName(Buf[0], Size);
northener вне форума Ответить с цитированием
Старый 13.08.2020, 18:41   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от CraZZZy-GameRRR Посмотреть сообщение
А почему в примере выше, если заменить строку на без @, то работает аналогично?
Потому что в паскале 3 версии были строки на основе массивов, потом в 5 версии паскаля появились короткие строки string[255]. Для совместимости сделали приведение типов при присвоение. Поэтом в Delphi 1 добавилось автопреобразование строковых типов в PChar.



Цитата:
Сообщение от northener Посмотреть сообщение
Потому что Buf статический массив.
Но грамотно в таких случаях писать
Код:
GetComputerName(Buf[0], Size);
Дык ошибка будет.
Наиболее общий способ.
GetComputerName(@Buf[0], Size);
Хотя грамотным его не назовешь в виду того, что в коде используются безыменные константы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 13.08.2020, 19:07   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Поэтом в Delphi 1 добавилось автопреобразование строковых типов в PChar
Нее. В Delphi 2

Последний раз редактировалось northener; 13.08.2020 в 19:12.
northener вне форума Ответить с цитированием
Старый 14.08.2020, 02:56   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Дык ошибка будет.
Эт да. Согласен. Был не внимателен. В данном случае компилятору нужен PChar, а не просто адрес.
northener вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает? ISV-777 Общие вопросы по Java, Java SE, Kotlin 1 17.01.2012 21:19
Что означает int (*a)[N]; ? ololo-schoolboy Общие вопросы C/C++ 10 06.03.2011 06:22
Что означает serg268 C++ Builder 2 04.03.2011 20:44
Что означает? F_A_N_Alex Помощь студентам 1 07.10.2009 22:50