lazarus研究 C指標和PASCAL指標

2021-10-18 05:46:08 字數 2280 閱讀 7596

一、c與pascal指標基本操作等價表
序號

情景c語言

等價的pascal說明1

型別指標的定義

char *charptr ;

var charprt : ^char ;

int *intptr ;

var intptr : ^integer ;

2無型別指標的定義

void *p ;

p:pointer;

3指標的解除引用

(*p)

p^要解除指標引用(即取出指標所指區域的值)

4取位址

intptr=& i ;

intptr:=@i ;

取某物件的位址並將其賦值給指標變數

5指標運算

intptr++ ;

inc(intptr) ;

編譯器會產生讓intptr前進sizeof(integer)步長的**

intptr+=2 ;

inc(intptr,2) ;

6動態記憶體分配

intptr=(int *) malloc(sizeof(int) * 20) ;

getmem(intptr, sizeof(integer)*20);

分配20個整型變數空間

free(intptr) ;

freemem(intptr) ;

釋放分配的空間

二、字元陣列的運算

c沒有字串型別,以字元陣列方式來處理字串,於是有一套str開頭的庫函式

char str[15]

;char

*pstr;

strcpy

(str,

"hello world");

strcat

(str,

"testok");

pstr =

(char*)

malloc

(sizeof

(char)*

15);strcpy

(pstr, str)

;printf

(pstr)

;free

(pstr)

;其實,object pascal提供了完全類似c語言的一整套字元陣列的運算函式。

以上那段**的object pascal版本是這樣的:

var str : array [

1..15

] of char

; pstr : pchar;

//pchar 也就是 ^char

begin

strcopy

( @str,

'hello world');

// 在c語言中,陣列的名稱可以直接作為陣列首位址指標來用

// 但pascal不是這樣的,因此str前要加上取址運算子

// 但如果陣列是以0為起始下標,則與c語言一樣,可以陣列名稱作為陣列首位址

strcat

( @str,

' test ok ');

getmem

(pstr,

sizeof

(char)*

15);strcopy

(pstr, @str)

;write

(pstr)

;freemem

(pstr)

;end;

三、函式指標

在動態呼叫dll中的函式時,就會用到函式指標。假設用c語言編寫的一段**如下:

typedef

int(

*pvfn)

(int);

//定義函式指標型別

intmain()

這個語法有些晦澀,而同樣的**在object pascal中卻非常易懂:

type pvfn = function (para : integer)

: integer;

var fn : pvfn;

// 也可以直接在此處定義,如:fn : function (para:integer):integer;

hdll : hmodule;

begin

hdll :

=loadlibrary

('test.dll');

fn :

=getprocaddress

(hdll,

'function1');

fn(2)

;freelibrary

(hdll)

;end;

c 中 p a和p a的區別

大學初學指標的時候,時常懵逼,有時候覺得自己已經掌握了,但是一看複雜的程式和原始碼裡的指標用法,就又蒙了,以至於談指標色變。至於二級指標,陣列指標 指標陣列 函式指標什麼的更是被嚇懵。現在來逐個擊破他們,為我們的程式設計道路掃清阻礙。首先需要明白一點的是,指標是個變數,它和int型別 float型別...

關於C 指標的研究

這2天,為了應付實習公司的面試,要求我在windows下寫乙個俄羅斯方塊出來 以前用j2me寫過乙個俄羅斯方塊,基本演算法和資料結構都有一定的考慮了,可動手開寫的時候c 的指標很是把我鬱悶了一陣,特別是關於陣列的指標和指標陣列等,一多了就攪在一起搞不清楚,昨天花了一下午基本上算是搞懂了,在這裡做個總...

C和指標指標

變數的值就是分配給該變數的記憶體位置所儲存的數值。int a 112 int d a 指標d指向a,但是變數d表示變數a的位址,d表示a的內容。的優先順序高於 cp 設計3個步驟 1 操作符產生cp的乙份拷貝 2 操作符增加cp的值 3 在cp的拷貝上執行間接訪問操作 char ch a char ...