一.类型指针的定义
对于指向特定类型的指针,在C中是这样定义的:
 int   *ptr;
 char  *ptr;在pascal中:
 var
     ptr:  ^integer;
     ptr:  ^char;二.无类型的指针定义
在C中有void*类型,也就是指任何类型数据的指针在pascal中为其定义了一个专门的类型:pointer所以pascal中的:ptr: pointer 等价于 C中的: void *ptr三.指针的解除引用
要解除指针引用,即取出指针所指区域值
C中语法:(*ptr)pascal中语法:ptr^四.取地址(指针赋值)取某对象的地址并将起赋值给指针变量
C语法:
               ptr=&object;
pascal语法:   ptr:=@object;五.指针运算
在C中,可对指针进行移动运算
  char   a[20];
  char   *ptr=a;
  prt++;
  ptr+=2;
当执行ptr++,编译器会产生让ptr前进sizeof(char)步长的代码,之后prt+=2使得ptr前进两个步长在pascal中是这样:
  var
    a  : array [0..20] of char;
    ptr: pchar;  //pchar 相当于^pchar
begin 
    ptr:=@a;
    inc(ptr);    //这句等价于 C 的 ptr++;
    inc(ptr,2);  //这句等价于 C 的 ptr+=2;
end;
只是在pascal中,只允许对有类型的指针进行这样的运算六.动态内存分配
 在C中,用malloc()库函数分配内存,free()释放内存
 int   *ptr1,*ptr2;
 int   i;
ptr1 =(int*)malloc(sizeof(int)*20;
ptr2 =ptr;   //保留原始指针位置
for (i=0;i<20;i++)
{
  *ptr1=i;
   ptr1++;
}
free(ptr2); 在pascal中,动态分配内存的函数为GETMEM(),释放函数为FREEMEM()传统pascal中获取内存的函数为NEW()和DISPOSE(),但NEW()只能获得对象的单个实体的内存大小,无法取得连续的存放多个对象的内存块,因此,与C对应的PASCAL代码以下:
   var 
        ptr1,ptr2 :^integer;
               i  : integer;
begin
     GetMem(ptr1,sizeof(integer)*20);
     ptr2:=ptr1;
for i:=0 to 19 do
    begin
        ptr1^:=i;
        inc(ptr1);
    end;
   FreeMem(Ptr2);
end;七.字符数组的运算
在C中,是没有字符串类型的,字符串是用字符数组来实现,于是也有一套一Str开头的库函数以进行字符数组的运算,如以下:
   char  str[15];
   char  *pstr;
   strcpy(str,"teststr");
   strcat(str,"_testok");
   printf(pstr);
   free(pstr);在pascal中:
  var  str:  array [15] of char;
       pstr: pchar;
begin
   strcopy(@str,'teststr');//在C中,数组的名称可以直接作为数组首地址指针来用,但Pascal不是这样的,因此 str前要加上取地址的运算符
   strcat(@str,'_testok');
   getmem(pstr,sizeof(char) *15);
   strcopy(pstr,@str);
   write(pstr);
   freemem(pstr);
end;八.函数指针
在动态调用DLL中函数时,就会用到函数指针,在C中:
typedef    int(*PVFN)(int);  //定义函数指针类型
   int main ()
{
   HMODULE  hModule=LoadLibrary("test.dll");
   PVFN pvfn=NULL;
        pvfn=(PVFN)
        GetProcAddress(hModule,"Funcation1");
        pvfn(2);
   FreeLibrary(hModule);}在Pascal中:
 type
    PVFN=Function (para:integer):integer;
 var
     fn:PVFN;
     hm:HMODULE;
Begin
     hm:=LoadLibrary('test.dll');
     fn:=GetProcAddress(hm,'function1');
     fn(2);
 FreeLibrary(hm);
end;

解决方案 »

  1.   

    以上都是看了CSDN前辈们的帖子的总结,谢谢大家指点
      

  2.   

    ----------------------------------------------------------
       char  str[15];
       char  *pstr;
       strcpy(str,"teststr");
       strcat(str,"_testok");
       printf(pstr);
       free(pstr);在pascal中:
      var  str:  array [15] of char;
           pstr: pchar;
    begin
       strcopy(@str,'teststr');//在C中,数组的名称可以直接作为数组首地址指针来用,但Pascal不是这样的,因此 str前要加上取地址的运算符
       strcat(@str,'_testok');
       getmem(pstr,sizeof(char) *15);
       strcopy(pstr,@str);
       write(pstr);
       freemem(pstr);
    ----------------------------------------------------------代码不对应。
    C中没有分配内存
      

  3.   

    我记得我以前在Nicrosoft的主页上看到这个文章的