码农的笔记

Delphi虽好,但已不流行; 博客真好,可以做笔记

博客园 首页 新随笔 联系 订阅 管理

--------Unit开始---

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


Tmyrecord01=record
S01:string[6];
I01:Integer;
D01:Double;
end;
Tmyrecord02=record
D01:Double;
end;
Tmyrecord03=record
S01:string[13];
S02:string[9];
S03:string[4];
D01:Double;//8
end;
Tmyrecord04=record
S01:string[6];
end;

TmyrecordPacked01=Packed record
S01:string[6];//7
I01:Integer;//4
D01:Double;//8
end;
TmyrecordPacked02= Packed record
S01:string[13];
S02:string[9];
S03:string[4];
D01:Double;//8
Array01:array[0..4095] of Char;
end;
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
My01:Tmyrecord01;
My02:Tmyrecord02;
My03:Tmyrecord03;
My04:Tmyrecord04;
p:PChar;
vs:string;
begin
vs:='ABC';
P:=PChar('中国');
Memo1.Lines.Add('---------Tmyrecord------------');
Memo1.Lines.Add('SizeOf(My01): '+IntToStr(SizeOf(My01)));
Memo1.Lines.Add('SizeOf(My02): '+IntToStr(SizeOf(My02)));
Memo1.Lines.Add('SizeOf(My03): '+IntToStr(SizeOf(My03)));
Memo1.Lines.Add('SizeOf(My04): '+IntToStr(SizeOf(My04)));
My01.S01[0]:='A'; //vs[0] //vs不能从下标0开始,切记!! //S01:string[6];这个却可以从下标0开始,要区分出来;;
{ string[]类型和string类型
简短的说下:String[]类型,相当于array[0..255] of char的数组 ,也就是说String[i]中的i最大值就是255,下标从0开始;;
String类型,很特殊,string实际指向的是一个内存,如果此处vs[0]肯定报错的,把这个vs看成数组,vs的下标从1开始,
vs[0]对于string类型来说很重要保存了vs的长度(哈哈,猜测的,还有引用计数啥的,不清楚,反正有点复杂),不会让你以这种vs[0]方式读取的!
这里就不去验证了;
}

My01.S01:=p;
Memo1.Lines.Add('My01.S01[0]: '+My01.S01);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
My01:TmyrecordPacked01;
My02:TmyrecordPacked02;
p,p1:PChar;

begin
Memo1.Lines.Add('---------TmyrecordPacked------------');
Memo1.Lines.Add('SizeOf(My01): '+IntToStr(SizeOf(My01)));
Memo1.Lines.Add('SizeOf(My02): '+IntToStr(SizeOf(My02)));
p:=PChar('中国');
StrCopy(@My02.Array01,p) ;
p1:=pchar(@My02.Array01);
Memo1.Lines.Add('p1: '+p1);
end;

end.

---------------------------------------
Delphi字符串、PChar与字符数组之间的转换

设有以下三个变量:
var
s:string;
p:pchar;
a:array[1..20] of char;
那么三者之间的转换如下:
1、字符串到PChar
p:=PChar(s);
2、PChar到字符串
s:=p;
3、PChar到字符数组
StrCopy(@a,p);
4、字符数组到PChar
PChar(@a);
5、字符串与字符数组之间的转换就只有通过PChar来中转了。例如下面这个例子:
procedure TForm1.btn1Click(Sender: TObject);
var
str:array[1..10] of char;
begin
StrCopy(@str,PChar(mmo1.Text));
mmo2.Text:=PChar(@str);
end
————————————————
版权声明:本文为CSDN博主「fowlersong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pascal4123/article/details/84240559

----------------------------------------------

--------unit结束----

 

 

-------------Form开始

object Form1: TForm1
Left = 841
Top = 452
Width = 323
Height = 222
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 16
Top = 144
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object Memo1: TMemo
Left = 0
Top = 0
Width = 307
Height = 121
Align = alTop
ImeName = '中文(简体) - 搜狗拼音输入法'
ScrollBars = ssBoth
TabOrder = 1
end
object Button2: TButton
Left = 112
Top = 144
Width = 75
Height = 25
Caption = 'Button2'
TabOrder = 2
OnClick = Button2Click
end
end

 

-------------Form结束

posted on 2021-04-23 17:39  码农的笔记  阅读(138)  评论(0编辑  收藏  举报