为什么没人里我呢?是不是我以前说‘错’话,各位富翁都不想理我了?不是吧!我真的不明白! (50分)

  • 主题发起人 主题发起人 fjhst
  • 开始时间 开始时间
F

fjhst

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟以前是用c语言的,近来用delphi, 对delphi里的指针操作不顺手, 恳请各位富翁给些例子!

(1)第一个问题

C语言---------------->

char* MyStr = "This is a test string!";
char* pMyStr;

pMyStr = MyStr;

while(*pMyStr != 0x00 )
{
*pMyStr = *pMyStr+0x30;
pMyStr++;
}


嗯, 在delphi怎么写最简洁呢?


(2)第二个问题

从文本文件中读取信息用Read、Readln两个标准过程。

当读入数值时,Read、Readln假定数值是用一个或多个空格分开的,而不是逗号、分号或其它字符。对如下一条语句:

Read ( TextFileVar , Num1 , Num2 , Num3 ) ;

如果文件中的数值是:

100 200 300 

则能够成功读入,而若文件中的数值是

100 200, 300

则Read读入"200,"并试图把它转化成一个数值时会引发一个异常。

像这样在C语言里我只要用两个指针, 一个指向文件的指针, 一个指向变量的指针即可完成问题。

然尔在delphi怎样用指针完成呢?而且我希望在delphi里的指针操作具有通用性(犹如C语言里的指针那样通用)!


我知道我很笨, 我也知道这样说出来肯定会再次被骂, 可我还想说:C语言的指针操作简洁灵活,

delphi的指针操作有点罗嗦繁琐!我想这种感觉应该是暂时的, 只要您能让我心服口服!


(3)第三个问题

delphi里的变量类型很多, 怎样用实现指针操作而不受变量类型限制呢(就是字节级操作及位操作)?


(4)第三个问题

在delphi里怎样在var声明块里定义变量的长度边界时实现像C语言里的宏定义?

var
AStr : array[0..1024] of char;

在C语言里可以先宏定义
#define MY_STRING_LENGTH 1024;

...

char AStr[MY_STRING_LENGTH];


这样的好处是便于代码的修改以及日后的维护?但是这样的好处在delphi怎样以最简洁的实现呢?




当然,各位富翁还可以将delphi指针应用例子写一下!比如指针与数组, 指针与对象, 指针与纪录...谢谢!
 
function GetFileNameFromSql(FileName: PChar; Sql: string):Integer;
var
i: Integer;
ptr: PChar;
begin
ptr := PChar(Sql);

while ptr^ <> #39 do
begin
Inc(ptr);
end;

i := 0;
Inc(ptr);
while ptr^ <> #39 do
begin
FileName := ptr^;
i := i + 1;
Inc(ptr);
end;

FileName := #0;

result := 0;
end;
 
嗯!这个怎么写呢!
{ Encrypt User Information }
procedure EnCryptUserInfor(UserInfor: string);
var
pUserInfor : PChar;
begin
pUserInfor := PChar(UserInfor);

{我的意图是把该字符串里的每个字符的ascii码值加予$30(就是空格ascii字符值),用数组罗里罗唆的!}
while pUserInfor^ <> #00 do
begin
pUserInfor^ := pUserInfor^+$30;{???编译错误!}
Inc(pUserInfor);
end;
end;
 
哎!说到C语言与指针, 真是于遗憾!以前我的老师兼老大兼经理在这方面造诣很深!

可惜我天生笨蛋,只学到一点皮毛就离开他了!

他对我影响很大,真是很怀念他哦!

 
真是被搞得鸟火了!
 
第一段原样翻译:
const
MyStr = 'This is a test string!';
var
pMyStr: PChar;
i: Integer;
begin
GetMem(pMystr,Length(MyStr));
try
StrPCopy(pMyStr,MyStr);
for i:=0 to Length(MyStr)-1 do
pMyStr := Char( Ord(pMyStr) + $30);
finally
FreeMem(pMyStr,Length(MyStr));
end;

最后一段
procedure EnCryptUserInfor(var UserInfor: string); //改成参数引用
var
i: Integer;
begin
for i:=1 to Length(UserInfor) do
UserInfor := Char( Ord(UserInfor) + $30);
end;

调用完成后,输入的参数即已经变成了每个字符加0x30了。
 
结构指针:
定义:
MyStruc = record
P1: Integer;
P2: array[0..127] of Char;
P3: String;
end;
pMyStruc = ^MyStruc;

使用:
var
p: pMyStruc;
begin
New(p);
try
p^.P2 := 'abc';
p^.P3 := 'hello';
p^.P1 := Length(p^.P3);
... ...
finally
Dispose(p);
end;
end;
 
小弟真是万分感谢哦!有分有分!
 
结构指针倒是没有碰到那么多问题!谢谢!
 
好像没人肯回答?为什么呀!
 
啊!都是我自言自语哦!

刚才看了delphi help的‘Pointer and address routines’,收获很多!

其实我犯了一个很严重的错误!delphi是强类型的, 而C语言是若类型的!

我企图在delphi里使用弱类型, 当然屡屡碰壁!
 
好罗嗦啊,下次你一个一个问题地问,别人回答你也容易些嘛。
 
请与我联系:BadEgg@163.com
 
多人接受答案了。
 
后退
顶部