国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

做網(wǎng)站 單頁數(shù)量網(wǎng)絡(luò)營銷的步驟

做網(wǎng)站 單頁數(shù)量,網(wǎng)絡(luò)營銷的步驟,開源b2c商城,商城網(wǎng)站建設(shè)需要什么團(tuán)隊(duì)前言 指針變量作為參數(shù)傳遞時(shí),很容易混淆指針本身和指針指向的內(nèi)容,實(shí)際應(yīng)用中可能會(huì)導(dǎo)致無法預(yù)料的問題,所以做一下詳細(xì)分析。 注意,在測試過程中為了看測試效果,有些指針變量分配了空間,但是未做回收&am…

前言

指針變量作為參數(shù)傳遞時(shí),很容易混淆指針本身和指針指向的內(nèi)容,實(shí)際應(yīng)用中可能會(huì)導(dǎo)致無法預(yù)料的問題,所以做一下詳細(xì)分析。
注意,在測試過程中為了看測試效果,有些指針變量分配了空間,但是未做回收,實(shí)際應(yīng)用中要注意,分配空間后在合適的位置釋放。

1. 指針變量直接作為參數(shù)傳遞

指針變量pVariant 作為實(shí)參傳遞給函數(shù)funcPointer,在funcPointer中由形參pParam接收

1.1 代碼

void funcPointer(int *pParam)
{qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam<<"pParam  值"<<*pParam;// 修改指針?biāo)赶虻刂分械膬?nèi)容*pParam = 2;qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam<<"pParam  值"<<*pParam;// 修改pParam的指向pParam = new int;*pParam = 3;qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam<<"pParam  值"<<*pParam;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int *pVariant = new int;*pVariant = 1;qDebug()<<"pVariant自身的地址:"<<&pVariant<<"pVariant指向的地址:"<<pVariant<<"pVariant值"<<*pVariant;funcPointer(pVariant);qDebug()<<"pVariant自身的地址:"<<&pVariant<<"pVariant指向的地址:"<<pVariant<<"pVariant值"<<*pVariant;return a.exec();
}

1.2 輸出結(jié)果:

1. pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x1986708 pVariant值 1
2. pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x1986708 pParam  值 1
3. pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x1986708 pParam  值 2
4. pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x1986848 pParam  值 3
5. pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x1986708 pVariant值 2

1.2.1 結(jié)果分析:

  • 從1,2可以看出,pVariant和pParam 本身的存儲(chǔ)地址不相同,指向的地址和pVariant相同,說明pParam是pVariant的一個(gè)拷貝。
  • 從2,3,5可以看出,通過函數(shù)funcPointer可以成功修改指針?biāo)赶虻牡刂分械膬?nèi)容。
  • 從1,3,4,5可以看出,修改形參pParam指向的地址后,不會(huì)影響實(shí)參pVariant。
    綜上,一級(jí)指針變量直接做為參數(shù)傳遞時(shí),函數(shù)中會(huì)產(chǎn)生一個(gè)臨時(shí)拷貝,通過這個(gè)拷貝可以修改原指針變量所指向地址的內(nèi)容,但是不能改變原指針的指向。

1.3 在函數(shù)funcPointer最后增加回收空間操作:

    delete pParam;pParam = nullptr;qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam;

1.3.1 輸出結(jié)果:

1. pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x31265e8 pVariant值 1
2. pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x31265e8 pParam  值 1
3. pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x31265e8 pParam  值 2
4. pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x3126768 pParam  值 3
5. pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x0
6. pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x31265e8 pVariant值 2

從結(jié)果可以看出,如果形參pParam 執(zhí)行new重新分配了空間,即此時(shí)pParam 和pVariant指向的地址不同,那么在函數(shù)中回收指針空間時(shí)只能操作pParam,不會(huì)回收指針變量pVariant的空間,所以此時(shí)想回收指針變量pVariant空間的話,需要在外部回收。

1.3.2 funcPointer函數(shù)中去掉pParam的new操作,增加delete

void funcPointer(int *pParam)
{qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam<<"pParam  值"<<*pParam;// 修改指針?biāo)赶虻刂分械膬?nèi)容*pParam = 2;qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam<<"pParam  值"<<*pParam;delete pParam;pParam = nullptr;qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int *pVariant = new int;*pVariant = 1;qDebug()<<"pVariant自身的地址:"<<&pVariant<<"pVariant指向的地址:"<<pVariant<<"pVariant值"<<*pVariant;funcPointer(pVariant);qDebug()<<"pVariant自身的地址:"<<&pVariant<<"pVariant指向的地址:"<<pVariant<<"pVariant值"<<*pVariant;return a.exec();
}

1.3.3 輸出結(jié)果

pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x19267e8 pVariant值 1
pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x19267e8 pParam  值 1
pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x19267e8 pParam  值 2
pParam  自身的地址: 0x77fdd0 pParam  指向的地址: 0x0
pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x19267e8 pVariant值 1761789996

從結(jié)果可以看出,執(zhí)行 delete pParam; pParam = nullptr;后,pVariant指向的空間也已經(jīng)被回收,但是pVariant不為空,依然指向原來的地址,獲取到了一個(gè)未定義的值,這樣可能導(dǎo)致程序出現(xiàn)不可控的問題。

2.指針變量作為引用參數(shù)傳遞

2.1 代碼

void funcRefPointer(int *&pParam)
{qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam<<"pParam  值"<<*pParam;*pParam = 2;qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam<<"pParam  值"<<*pParam;pParam = new int;*pParam = 3;qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam<<"pParam  值"<<*pParam;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int *pVariant = new int;*pVariant = 1;qDebug()<<"pVariant自身的地址:"<<&pVariant<<"pVariant指向的地址:"<<pVariant<<"pVariant值"<<*pVariant;funcRefPointer(pVariant);qDebug()<<"pVariant自身的地址:"<<&pVariant<<"pVariant指向的地址:"<<pVariant<<"pVariant值"<<*pVariant;return a.exec();
}

2.2 輸出結(jié)果:

1. pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x34665f8 pVariant值 1
2. pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x34665f8 pParam  值 1
3. pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x34665f8 pParam  值 2
4. pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x3466738 pParam  值 3
5. pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x3466738 pVariant值 3

2.2.1結(jié)果分析:

pParam 和 pVariant的存儲(chǔ)地址、指向地址和內(nèi)容完全一致。
指針變量作為引用傳遞時(shí),形參pParam是指針變量pVariant的一個(gè)別名,對pParam的操作相當(dāng)于對pVariant直接進(jìn)行操作。引用傳遞時(shí)可以修改原指針的指向,可以修改指向地址的內(nèi)容。

2.3在函數(shù)funcRefPointer最后增加回收空間操作:

    delete pParam;pParam = nullptr;qDebug()<<"pParam  自身的地址:"<<&pParam<<"pParam  指向的地址:"<<pParam;

2.3.1輸出結(jié)果:

pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x3496638 pVariant值 1
pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x3496638 pParam  值 1
pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x3496638 pParam  值 2
pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x3496878 pParam  值 3
pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x0
pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x0
從結(jié)果可以看出,引用傳遞指針變量時(shí),在函數(shù)中所有對引用變量的操作,都會(huì)影響原來的指針,包括delete操作,所以引用傳遞時(shí),如果確定此指針之后不再使用,那么可以在函數(shù)中釋放空間并將指針置空。detele指針并置為nullptr后,無法再獲取指針指向的內(nèi)容。

3.使用二級(jí)指針傳遞

傳遞指針變量的地址

3.1 代碼

void funcPPointer(int **pParam)
{qDebug()<<"pParam  自身的地址:"<<&(*pParam)<<"pParam  指向的地址:"<<*pParam<<"pParam  值"<<**pParam;**pParam = 2;qDebug()<<"pParam  自身的地址:"<<&(*pParam)<<"pParam  指向的地址:"<<*pParam<<"pParam  值"<<**pParam;*pParam = new int;**pParam = 3;qDebug()<<"pParam  自身的地址:"<<&(*pParam)<<"pParam  指向的地址:"<<*pParam<<"pParam  值"<<**pParam;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int *pVariant = new int;*pVariant = 1;qDebug()<<"pVariant自身的地址:"<<&pVariant<<"pVariant指向的地址:"<<pVariant<<"pVariant值"<<*pVariant;funcPPointer(&pVariant);qDebug()<<"pVariant自身的地址:"<<&pVariant<<"pVariant指向的地址:"<<pVariant<<"pVariant值"<<*pVariant;return a.exec();
}

3.2 輸出結(jié)果

pVariant自身的地址: 0x77fdec pVariant指向的地址: 0x35166c8 pVariant值 1
pParam  自身的地址: 0x77fdec pParam  指向的地址: 0x35166c8 pParam  值 1
pParam  自身的地址: 0x77fdec pParam  指向的地址: 0x35166c8 pParam  值 2
pParam  自身的地址: 0x77fdec pParam  指向的地址: 0x3516748 pParam  值 3
pVariant自身的地址: 0x77fdec pVariant指向的地址: 0x3516748 pVariant值 3

二級(jí)指針傳遞時(shí),輸出結(jié)果和引用傳遞一樣,因?yàn)槎枷喈?dāng)于傳遞了原指針的地址。

3.3 在函數(shù)funcPPointer最后增加:

    delete (*pParam);(*pParam) = nullptr;qDebug()<<"pParam  自身的地址:"<<&(*pParam)<<"pParam  指向的地址:"<<*pParam;

3.4 輸出結(jié)果:

pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x34967a0 pVariant值 1
pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x34967a0 pParam  值 1
pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x34967a0 pParam  值 2
pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x3496730 pParam  值 3
pParam  自身的地址: 0x77fe04 pParam  指向的地址: 0x0
pVariant自身的地址: 0x77fe04 pVariant指向的地址: 0x0

增加delete后的輸出結(jié)果也和引用傳遞時(shí)相同。所以,指針變量作為引用和二級(jí)指針的方式傳遞時(shí),效果相同。

注意事項(xiàng)

1. delete指針后,如果不將指針置為nullptr,會(huì)產(chǎn)生野指針,指針仍會(huì)指向原來的地址,再次使用可能會(huì)導(dǎo)致程序崩潰,或者會(huì)得到一個(gè)不確定的值,導(dǎo)致程序產(chǎn)生不可控的結(jié)果。
2. 使用引用傳遞或者二級(jí)指針傳遞時(shí),在函數(shù)中重新分配空間之前,需要將上一次new分配的空間回收,否則會(huì)造成內(nèi)存泄漏。也就是多次new的時(shí)候需要對應(yīng)的delete。
3. 如果需要使用調(diào)用接口的方式釋放指針空間時(shí),需要使用二級(jí)指針或者引用傳遞指針變量的方式,也就是直接傳遞指針變量的地址。如果直接使用指針傳遞,能夠正常回收空間,但是無法將實(shí)參指針置為空值,導(dǎo)致其成為野指針,從而引起內(nèi)存問題。

http://m.aloenet.com.cn/news/36730.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)費(fèi)用細(xì)項(xiàng)廣州seo推廣公司
  • 中英網(wǎng)站的設(shè)計(jì)app開發(fā)費(fèi)用一覽表
  • 上海網(wǎng)站建設(shè)百家號(hào)廣告投放推廣平臺(tái)
  • 網(wǎng)站建設(shè)石家莊今天國際新聞大事
  • 制作網(wǎng)站接單seo關(guān)鍵詞排名如何
  • 有哪些做買家秀的網(wǎng)站企業(yè)營銷平臺(tái)
  • 酒店網(wǎng)站策劃書網(wǎng)站打開
  • cms系統(tǒng)javaseo快速排名軟件app
  • 網(wǎng)新科技做網(wǎng)站怎么樣武漢百度seo排名
  • 專業(yè)營銷網(wǎng)站費(fèi)用企業(yè)seo關(guān)鍵字優(yōu)化
  • 做房產(chǎn)的網(wǎng)站排名中國互聯(lián)網(wǎng)協(xié)會(huì)
  • 門戶網(wǎng)站內(nèi)容公眾號(hào)推廣費(fèi)用一般多少
  • 華為云建站和阿里云建站區(qū)別搜外滴滴友鏈
  • 云虛擬主機(jī)怎么做網(wǎng)站太原模板建站定制網(wǎng)站
  • 淄博著名網(wǎng)站開發(fā)方法年度關(guān)鍵詞
  • 揭陽做網(wǎng)站哪個(gè)好搜索引擎優(yōu)化是指什么
  • 如何做網(wǎng)站編輯 沒技術(shù)媒體吧軟文平臺(tái)
  • php網(wǎng)站開發(fā)員工資邵陽做網(wǎng)站的公司
  • 網(wǎng)站建設(shè)教程app今日新聞事件
  • 沒有網(wǎng)站怎么做淘寶客seo優(yōu)化技術(shù)培訓(xùn)
  • 大冶建設(shè)局網(wǎng)站優(yōu)化設(shè)計(jì)六年級(jí)上冊語文答案
  • 怎么不花錢做網(wǎng)站專業(yè)營銷推廣團(tuán)隊(duì)
  • 杭州亞運(yùn)會(huì)閉幕式安卓手機(jī)優(yōu)化大師官方下載
  • 鼎湖網(wǎng)站建設(shè)啥都能看的瀏覽器
  • 杭州微網(wǎng)站開發(fā)先做后付費(fèi)的代運(yùn)營
  • 中視頻自媒體平臺(tái)注冊seo中心
  • 廈門外貿(mào)商城網(wǎng)站建設(shè)seo運(yùn)營做什么
  • 網(wǎng)站地圖怎么做XML網(wǎng)站網(wǎng)上推廣
  • 網(wǎng)站開發(fā)建設(shè)方案書嵌入式培訓(xùn)
  • jsp網(wǎng)站開發(fā)教學(xué)上海培訓(xùn)機(jī)構(gòu)有哪些