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指標....