⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 120.htm

📁 水木清华的BBS文章
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://bbs.tsinghua.edu.cn"><font face="黑体"><big><big>水木清华★</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">         Delphi编程                            (BM: strayli FlyingBoy)          </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="454"> <p align="center">[<a href="index.htm">回到开始</a>][<a href="4.htm">上一层</a>][<a href="121.htm">下一篇</a>]
<hr><p align="left"><small>发信人: lidan10 (信誓旦旦), 信区: Delphi <br>

标  题: Re: 关于指针动态分配的问题 <br>

发信站: BBS 水木清华站 (Thu Oct 22 20:03:52 1998) WWW-POST <br>

  <br>

  <br>

【 在 QUYAN (QUYAN) 的大作中提到: 】 <br>

: 我定义了一个记录型指针: <br>

: <br>

: type FileType=Record <br>

:     TypeID:string[4]; <br>

:     TypeName:string[20]; <br>

: end; <br>

: <br>

: PFileType:^FileType; <br>

: <br>

: 因为记录个数事先未知,所以我想根据情况动态分配内存。比如现在知道有5条记录。 <br>

: <br>

: <br>

: TypeNum:=5; <br>

: ReallocMem(PFileType,SizeOf(FileType)*TypeNum); <br>

: <br>

: 分配完之后,PFileType应为首地址,但访问各条记录时,只能这样写: <br>

:    PFileType^.TypeID:=...; <br>



:    PFileType^.TypeName:=...; <br>

: 这样只能访问第一条记录,其他记录不知怎样访问. <br>

: PFileType[1]^.TypeID 或 (PFileType+1)^.TypeID都不合法. <br>

: <br>

: 请各位大仙指点!!! <br>

  <br>

你应该这样写: <br>

/************************************************************ <br>

type FileRecord=Record <br>

       TypeID:string[4]; <br>

       TypeName:string[20]; <br>

     End <br>

  <br>

     FileArray:array [0..0] of FileRecord; <br>

     FilePoint:^FileArray <br>

  <br>

end; <br>

  <br>

  <br>

Function YourFunction; <br>

Var YourPoint: FilePoint <br>

    i:integer; <br>

    i:integer; <br>

Begin <br>

  TypeNum:=5; <br>

  <br>

  GetMem(YourPoint,Sizeof(FileRecord)*TypeNum)   ; <br>

  Try <br>

    For i:=0 to TypeNum-1 do <br>

    Begin  YourPoint^[i].TypeID:=???; <br>

           YourPoint^[i].TypeName:=???; <br>

    End; <br>

  Finally <br>

    FreeMem(YourPoint,Sizeof(FileRecord)*TypeNum)   ; <br>

  End; <br>

End; <br>

//*************************************************************** <br>

也就是说,要先声明一个空数组,再用指针指向数组就可以了。 <br>

注意,在声明数组时,长度和起始下标是可以任意的,并可以通过下标变量进行访问,但 <br>

是如果你要显式的用数字下标访问变量,编译时会报错的。 <br>

  <br>

如 <br>

 FileArray:array [0..2] of FileRecord; <br>

 FilePoint:^FileArray <br>

  <br>



Var YourPoint:FilePoint <br>

    i:integer; <br>

Begin <br>

  GetMem(YourPoint,Sizeof(...)*10); <br>

  YourPoint^[0].TypeID:='aaa'; <br>

  YourPoint^[1].TypeID:='aaa'; <br>

  YourPoint^[2].TypeID:='aaa'; <br>

  i:=7; <br>

  YourPoint^[i].TypeID:='aaa'; <br>

                               //以上这样写都可以 <br>

  YourPoint^[3].TypeID:='aaa';//这样写会报错,因为声明的数组下标没有3 <br>

  <br>

End; <br>

  <br>

注意,千万别忘了FreeMem;具体的看帮助吧 <br>

  <br>

  <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.204.88.130] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="4.htm">上一层</a>][<a href="121.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -