Delphi中的結構體與結構體指標

2022-12-31 10:40:09 字數 3529 閱讀 2214

1樓:至少讓我看一眼

這個問題實際上與delphi 的語法結構有著密切的關係。因為delphi 所使用的語言是pascal 所以在pascal 中結構體與c++的結構體有著很多相似的地方。因為結構體經常被看做是一種變數型別。

作為一種類的變體,結構體在宣告例項的時候就被構建了。也正是這個原因所以 delphi 的結構體並沒有 create(構建) 與 destory(析構) 函式。 順便說一下,在變數區 宣告的delphi 的類變數 實際上是一個指標。

在你宣告:(var 類例項名稱: 類名) 時「類例項名稱」並沒有被建立, 而要等到你使用。

(類例項名稱 :=類名。create(引數1,引數2...這樣的情況下 這個類變數才會指向一個 存在的類例項。 這個類變數可以使用。

而pabc = tabc; 則正好宣告瞭pabc 是 tabc 這種結構體(變數型別)的指標、這樣就可以避免 了在宣告變數的時候 結構體就已被構建的問題。而new 和 dispose 這兩個函式就是為機構體動態地分配和釋放記憶體的函式。

這個問題,可能比較抽象,但是要是你理解指標的話 你可以 將結構體想象成 整數而 結構體的指標 考慮成 這個整數 的指標。這樣的話可能理解起來會比較容易。

2樓:匿名使用者

你之所以問這個問題是因為你不知道什麼時候要用指標。abc: tabc;很多時候當然可以代替 abc:

pabc;,但有些時候就必需要用指標,不然可能會有問題,比如你用一個tlist放你的資料,這時候按你那樣說可以用這個abc: tabc,然後這樣,但因為這時候abc記憶體的分配與釋放是delphi自己完成的,弄不好它就幫你把記憶體提前釋放了,這樣就會有問題,所以你要用abc:

pabc這個,自己分配(new)和釋放(dispose)記憶體。當然這只是個例子,還有很多地方不得不用指標的,比如要實現連結串列等。

delphi如何取得結構體指標的成員的首地址的值?

結構體指標和結構體中的指標的區別

3樓:啞然

1、針對的資料型別不同:

結構體指標:結構體指標對變數。

結構體中的指標:結構體中的指標指成員。

2、針對的含義不同:

結構體指標:指向結構體型別的指標。

結構體中的指標:指成員指標。

3、用法不同:

結構體指標:

struct a;struct a m,*p=&m;

p就是struct a型別的結構體指標,指向了同型別的結構體變數m。

結構體中的指標:

struct b

;struct b m,n; float bb=;;b成員是指float型別的指標,next成員是指struct b型別的指標。

4樓:天天向上知識店鋪

結構體指標是指指向結構體型別變數的指標。

如:struct a

;struct a m,*p=&m;

這裡的p就是struct a型別的結構體指標,指向了同型別的結構體變數m;有這個指向操作後,以後用m和用*p是一樣的。

結構體中的指標是指成員指標。

如:struct b

;struct b m,n;

float bb=;

這裡的b成員是指float型別的指標,next成員是指struct b型別的指標。

5樓:匿名使用者

如果有個叫做 abc 的結構體,結構體指標就是 abc *結構體中的指標,就是它有個成員是指標。

struct abc;

6樓:網友

這裡的b成員是指float型別變數的指標,next成員是指struct b型別變數的指標。

float、struct b都只是一種資料型別,是不佔用記憶體的,故沒有指標;

結構體指標與結構體變數用作函式引數時有什麼區別,在用法上

7樓:匿名使用者

(1)結構體指標作為函式引數時,呼叫時傳遞的是指向一個結構體變數的指標(即結構體變數的地址);結構體變數作為函式引數時,呼叫時傳遞的結構體變數本身。

(2)以下**顯示了呼叫時的區別。

#include

/* 定義結構體型別point */

typedef struct point;

void fun1(point point)

void fun2(point ppoint)

void main( )

程式的輸出為:

x=100, y=200

x=110, y=210

(3)觀察上面程式執行的結果發現 fun1函式執行後,p並沒發生變化;而呼叫fun2後,p卻改變了。這是因為:呼叫fun1時,所傳遞的引數p被複制到呼叫堆疊中,fun1函式所操作是堆疊中的變數而不是原來的那個變數(main中的p);另一方面,呼叫fun2時,傳入的p的地址,fun2通過地址,修改了main中的變數p。

這是結構體指標與結構體變數用作函式引數最大的區別。

一個結構體a,當它的指標作為引數傳入函式func,那麼在func中可以通過指標改變結構體的值,函式返回後,結構體的值被改變; 但是,當結構體變數作為引數傳入函式func時,在func函式中即使對他進行了修改,當函式返回時,結構體本身並沒有改變,因為修改的只是他的一個副本。

8樓:閭丘素芹支辰

你的理解是對的。copy

形參是結構體變數的,你對該結構體的所有修改都不會影響到實參,因為形參是實參的一個完整拷貝。

形參是結構體指標的,你對該結構體的修改直接影響實參的結構體資料。因為形參和實參都指向同一個記憶體區塊。注意:形參是一個指標,如果只改變指標本身,則不影響實參。

指向結構體的指標

delphi怎麼取得結構體指標的成員的首地址的值

9樓:匿名使用者

直接通過取地址符 & 進行獲齲 例如 : struct studentstudent stu;& 獲取 age 的地址。

delphi指標怎麼賦值給結構體變數

10樓:匿名使用者

mdata :=pdata^;

這樣就可以了。不過你的程式,我這邊跑不了,提示pdata 重複。

結構體指標和結構體變數在呼叫函式中的區別?

11樓:終展渾潔雅

首先bai如果這幾。

個結構體資料類du型。

相同,zhi把一個引數作為結構體dao

指標呼叫這幾個回結構體還可以做到,如答果這幾個結構體資料型別不同,用一個引數則無法實現你的要求。

變參函式也無法實現你的要求。變參函式只是說引數的個數是可變的,資料型別在定義好之後就不可變了。

有一個可以變通的辦法就首先假設你已經有了結構體a,b,c,再定義一個結構體d

typedef

struct

_dd;然後把引數的資料型別定義為。

d*,這樣你就可以通過這個引數呼叫裡邊的結構體變數了。

結構體指標陣列與結構體陣列有什麼不同

a是一個結構體陣列,已經有100個節點了。不需要再分配空間了。b是一個結構體變數,也已經有空間了,就和int b 已經有空間了一樣。c是一個指標陣列,c也已經有空間了,有3個元素,但是這三個元素是還沒有分配空間的指標,所以要用malloc分別為他們分配記憶體。d是一個結構體指標,和int d 一樣還...

c 結構體怎麼用,c 裡用結構體好嗎?

結構 struct 結構是由基本資料型別構成的 並用一個識別符號來命名的各種變數的組合。結構中可以使用不同的資料型別。1.結構說明和結構變數定義 在turbo c中,結構也是一種資料型別,可以使用結構變數,因此,象其它 型別的變數一樣,在使用結構變數時要先對其定義。定義結構變數的一般格式為 stru...

c語言結構體別名定義問題,C語言結構體別名定義問題

typedef struct stu linklist 此處第一了一個型的型別,即struct stu 即指向結構體stu的指標 所以head的型別也就是struct stu head為一個指向stu結構體型別的指標。但是並沒有未其分配具體的空間。可以將一個已定義為stu結構體的指標賦給它。c語言給...