能否建立void指標指向任何型別的變數

時間 2022-10-16 13:25:04

1樓:匿名使用者

使用型別轉換的時,以void*為中介型別是個次等選項,能不用就別用。因為在強制型別轉換中,轉換到void*型別的結果會將帶型別的指標(typed pointer)的型別資訊悉數抹除,在典型的情況下,只要以void*為型別轉換的中介型別,則必須牢記這個指標的原始型別資訊,並(適時的在通過一次強制的型別轉換恢復她)。如果**了爭取的指標原始型別資訊,那麼天下太平。

但是由於平臺的差異性,在進行可移植變化的時候,千萬記住不可以使用static_cast進行基本型別到public可用方式的型別指標的轉換,必須打散資料段,使用reinterpret_cast<>來進行逐個bit的轉換

char *cp=static_cast(ip); //錯誤

char *cp=reinterpret_cast(ip); //合法

2樓:戴靜柏

使用強制型別轉換

int i = 9;

void *ptr = (void *)&i;

這樣就可以了

在建立子執行緒時,就是通過void *來實現傳遞任何型別的引數的(包括自定義型別),不過在使用的時候,必須轉換回去

3樓:_小_蘇

可以指向 , 在用的時候強制轉換一下.

*ptr = (void*)&i ;

int b = (int)*ptr ;

void 指標能否指向類

4樓:匿名使用者

看看這個,應該對你有所幫助:

一個指向任何物件 型別的指標都可以賦值給型別為void* 的變數,void* 可以賦值給另一個void* ,兩個void* 可以比較相等與否,而且可以顯式地將void* 轉換到另一個型別。其它操作都是不安全的,因為編譯器並不知道實際被指的是哪種物件。因此,對void* 做其他任何操作都將引起編譯錯誤。

要使用void*,就必須顯式地將經轉換到某個指向特定型別的指標。

例:void test(int *pi)1.一般來說,如果一個指標被轉換(「強制」,cast)到與被批物件的實際型別不同的指標,使用後一個指標就是不安全的。

void* 的最重要用途是需要向函式貨傳遞一個指標,而又不能對物件的型別做任憑假設。還有就是從函式返回一個無型別的物件。要使用這樣的物件。

必須通過顯式的型別轉換。

2,到函式的指標與到成員的指標都不能賦給void*

5樓:晴雨

void 型別的指標(空指標)是可以用其他任何物件進行例項化的。不能指向類的。

指向void型別的指標可以存放指向任何型別的指標,但不能引用其自身是什麼意思

6樓:範中瑞

由於各型別資料佔用的儲存單元和儲存方式不同,指標指向的型別確定了儲存單元的長度及資料的儲存形式,這樣才能正確的取出資料,指向void的指標儲存的地址中沒有資料,也就無法引用自身,但可以賦值,賦值之後就是指向該資料型別的指標。

所謂引用指標變數,有3種方式:1,給指標變數賦值,2,引用指標變數指向的變數即該資料 3,引用指標變數的值,及存放該資料的地址

個人認為這三種哪一種用於void 指標引用自身都是極其無比糾結的事情,嘿嘿

c語言void*p表示指標變數p不指向任何型別的變數。使用空型別指標時要進行強制型別轉換。強制型別

7樓:匿名使用者

變數都有型別,float ,int ,long ,char如果你在運算中要讓一個int強行變成float就是int a

(float)a/

為什麼要這麼做呢,有時候a/15,如果a是小於15的整數,就會得到0所以就要讓a變成float型。你要問為什麼不把15變成15.0那如果是a/b,兩個都是整形,也容易得到0,所以要(float)a/b

這就是強制型別轉換

c 怎麼給void* 指標賦值

8樓:

p1 = p2;

或p1 = (void *) p2;

void指標可以指向任意型別的資料,亦即可用任意資料型別的指標對void指標賦值。例如:

int * pint;

void *pvoid;

pvoid = pint; /* 不過不能 pint= pvoid; */

如果要將pvoid賦給其他型別指標,則需要強制型別轉換如:pint= (int *)pvoid;

希望能幫助你

9樓:風雷九州

地址需要申請一塊記憶體才可以賦值,具體見**。

void *p1;

char *p2;

char a='c';

p2=&a;

p1 = (void *)malloc(sizeof(char));

*(char *)p1 = *p2;

printf("%c\n", *(char *)p1);

free(p1);

10樓:郗馳

c語言裡面需要做強制型別轉換。

void * vp = null;//void *指標只獲取變數或者物件的地址而無法獲取長度

type * tp;

vp = (void *)p;

將void指標變數賦值給另一個指標變數時,系統不會自動對該void指標做型別轉換。這句話對嗎???

11樓:風若遠去何人留

對於c語言來說 會做型別轉換的。

不過對於c++來說 不會做型別轉換,需要自行做強制轉換。

所以 這句話是否正確 是要看語言的。

任何型別指標指向的變數的型別相同才能進行比較,為什麼任何型別的指標都可以和null進行比較???

12樓:

#define null (void *) 0

因為null是(void*)型別,而任何指標都可以(顯性或隱性地)轉化成(void*),這使得比較成為可能。

int (*p)(int); //函式指標,可以用來指向任何一個返回int,帶一個int型別引數的函式

p = fun; //指向fun這個函式

p(5); //等同於fun(5),列印25

fun(5);//列印25

(*fun)(5);//列印25

(&fun)(5);//&fun是p,等同於p(5),還是列印25

(*p)(5); //列印25

這裡的要點在於:p(5)和(*p)(5),fun(5)和(fun*)(5)是一回事,這是c標準規定的

另外,fun本身也是一個函式指標。

記住:任何函式名,本身也是個函式指標。我們對函式的呼叫就是通過函式指標來實現的。

關於c語言的指向指標的指標和指標

這個問題很好啊,其實如果你用printf列印p1和p的話,你會發現這兩個值是相等的,因為他們都是指標,c語言是不區分指標之間的差別的,一切指標都是指標,不管他指向什麼,但是當前面加上 號後,他們就有了區別,p1很顯然是一個char型別,而 p這是一個char 型別。printf會把p1指向地址中的值...

C 指標指向型別轉換,C 指標 型別轉換問題,

long型別佔四個位元組,char佔一個,強制轉換後lp的每個元素就是對應從arr開始的四個位元組,即lp所指向的物件就是arr,arr 1,arr 2,arr 3這四個位元組所指向物件,低位元組在前,高位元組在後,下面是個例子 char arr 20 abcdefghijklmnopqrs lon...

指標指向不同型別資料時,指標變數佔用多大空間

在c中,指標只有3種 指向簡單變數的,指向結構體變數的,指向函式的.他們的大小和指向的型別無關,基本都是一樣的,等於地址寬度.在16位的地址的系統裡,用 段 偏移 來表示一個地址,當只用偏移的時候 段內 稱為near指標,當段偏移都用的時候 跨段 稱為far指標,far指標佔用空間大於near指標....