關(guān)于C++中void*的小作用淺析
本文主要給大家分享了關(guān)于C++中void*的一些你可能不了解的小作用,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
先來(lái)看一段代碼:
#include <iostream>
#include <string>
using namespace std;
void o(int* x, void* y){
cout << *x << endl;
cout << x << endl;
cout << *(int*)y << endl;
cout << (int*)y << endl;
}
int main()
{
int a = 1, b = 2;
o(&a, &b);
}
我們看上面的小代碼,函數(shù)o傳入兩個(gè)地址,一個(gè)是a,另一個(gè)是b,我們先來(lái)看看輸出的情況:
1 0x7038f28b8e98 2 0x7038f28b8e9c
首先最簡(jiǎn)單的,*x表示取值,所以輸出了1,接著x表示&a,也就是a的內(nèi)存地址,所以我們可以看到輸出了一個(gè)地址。這些都是基礎(chǔ),比較簡(jiǎn)單。
比較不好理解的地方來(lái)了,void* 指針可以代替任意類型的指針,但是呢,在輸出或者調(diào)用的時(shí)候,你明確采取強(qiáng)制類型轉(zhuǎn)換的方式,明確地告訴編譯器這是個(gè)什么指針。
所以我們先看第四個(gè),第四個(gè)(int*) y相當(dāng)于告訴編譯器這就是一個(gè)整數(shù)類型的指針,所以就輸出了地址,那么第三個(gè)呢,加上*表示的就是取值,不過(guò)這里要記得,千萬(wàn)不要寫(xiě)成(int*)*y,因?yàn)?y是不存在的(在沒(méi)有確定類型之前這樣是會(huì)報(bào)錯(cuò)的)所以必須注意。
這種傳遞方法可以用于不定類型的指針傳參,但是由于后面解析的時(shí)候需要強(qiáng)制類型轉(zhuǎn)換,所以在執(zhí)行效率上稍微低一些,如果是進(jìn)行大規(guī)模調(diào)用的話那么請(qǐng)謹(jǐn)慎。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
C語(yǔ)言自定義函數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了C語(yǔ)言自定義函數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享,來(lái)自PAT平臺(tái)(浙江大學(xué)計(jì)算機(jī)程序設(shè)計(jì)能力考試系統(tǒng))的一個(gè)題目,需要的朋友可以參考下2014-08-08
C語(yǔ)言之整數(shù)與浮點(diǎn)數(shù)運(yùn)算的類型轉(zhuǎn)換規(guī)則詳解
這篇文章主要介紹了C語(yǔ)言之整數(shù)與浮點(diǎn)數(shù)運(yùn)算的類型轉(zhuǎn)換規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
利用Debug調(diào)試代碼解決0xC0000005:?讀取位置?0x0000000000000000?時(shí)發(fā)生訪問(wèn)沖突問(wèn)
這篇文章主要介紹了利用Debug調(diào)試代碼解決0xC0000005:?讀取位置?0x0000000000000000?時(shí)發(fā)生訪問(wèn)沖突,本文給大家分享完美解決方案,需要的朋友可以參考下2023-03-03

