Консультация № 191272
09.08.2017, 13:36
0.00 руб.
09.08.2017, 14:09
0 7 2
Здравствуйте! Прошу помощи в следующем вопросе:
Почему в с++ я могу сделать запись вида
[code h=150] char sym;
sym=1;
sym=sym+5;
cout << sym<< endl;[/code]
а в делфи:
[code h=150] char sym;
sym:=1;
sym:=sym+5;
showmessage(sym);[/code]
Будет ошибка?
в делфи только так (sym:='1') т.е. я не могу оперировать с числовым представлением символа

Обсуждение

давно
Посетитель
7438
7205
09.08.2017, 14:09
общий
Обратите, пожалуйста, внимание на вопрос
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
09.08.2017, 14:11
общий
Адресаты:
Вопрос-то, как бы, по Delphi...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Мастер-Эксперт
425
4118
09.08.2017, 14:23
общий
Адресаты:
В С\С++ тип char - это вообще никакой не символ, а целочисленный тип, а с числами можно производить вычислительные операции. Он может быть интерпретирован при выводе на экран, как символ, но никаким символом на самом деле он не является.
В Pascal\Delphi тип char - это одна единственная буква и Вы с ней можете делать то, что обычно делают с буквами - например, вставить её в какое-нибудь слово или найти её в слове и удалить оттуда.
Для того, чтобы оперировать числовыми представлениями символов, надо тип-символ перевести в его числовое представление, т.е. сделать числом.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Старший Модератор
31795
6196
09.08.2017, 14:25
общий
Адресаты:
1) используйте функции ord и chr;
2)с помощью указателей.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
09.08.2017, 19:01
общий
это ответ
Здравствуйте, Caesar!

О делах С-шных Вам расскажут коллеги, я о Delphi.
Delphi унаследовал от Pascal - строгую типизацию, в отличии от С. Но и такая строгость обходится, т.к. есть механизмы.

См. приложение:
[code lang=pascal h=200]program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;
var
a:^char;{указатель на тип char}
b:^byte;{указатель на тип byte}
c:pointer;{указатель без типа}
d:char;{сама переменная}
begin
{ TODO -oUser -cConsole Main : Insert code here }
d:='1';
writeln('is one:',d);
{работа с указателями}
c:=@d;{получаем адрес переменной}
a:=c;{соотносим с нужным типом}
b:=c;
b^:=b^+5;
writeln('is two:',d,' char:',a^,' byte:',b^);
{работа со стандартными функциями}
d:=chr(ord(d)-4);
writeln('is end:',d);
readln;
end.[/code]

Немного об указателях:
а - указатель ссылающийся на переменную длиной один байт, тип символьный;
b - указатель ссылающийся на переменную длиной один байт, тип целый;
с - указатель ссылающийся на некоторый адрес.
Сама переменная представляет собой адрес в памяти и её длина. Компилятор проанализировав тип переменной подставляет соответствующие методы для работы с ними. Это видно в коде.

Удачи!
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
401251
75
10.08.2017, 06:10
общий
Всем спасибо за ответы!!!
давно
Мастер-Эксперт
425
4118
13.08.2017, 15:04
общий
это ответ
Здравствуйте, Caesar!
О делах Сишных.
Мы тут посоветовались с коллегами и выяснился интересный нюанс о типе char в Си++.
И в Си и в Си++ тип char - это знаковый целочисленный тип размером в 1 байт. По видимому в Си он изначально и планировался для отображения символов, однако его вид при выводе на экран целиком зависел от задаваемого формата вывода. Вот например код Си:
Код:
#include <stdio.h>
int main()
{
char sym;

sym=6;
printf("%d - %c\n", sym,sym);

return 0;
}

Там где формат вывода целочисленный, выводится именно то число, которое задано в программе - 6. а вот где формат задан как символьный - выводится его символьное представление - пики.
Всё меняется, как только мы переходим к Си++. Там считается, что про все элементарные типы cout понимает и без нас. и тип char он выводит именно как символьное представление числа. И никак иначе.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа