一、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 ...