C語言經(jīng)典指針筆試題詳解
題目一(有關(guān)傳值調(diào)用與非法訪問)
請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?
答 :
程序運(yùn)行會(huì)崩潰 ! 且存在內(nèi)存泄漏 ;
原因:
- 1.str傳給p的時(shí)候,是值傳遞,p是str的臨時(shí)拷貝,所以當(dāng)malloc開辟的空間起始地址放在p中的時(shí)候,不會(huì)影響str,str依然為空指針NULL ;
- 2.當(dāng)str是NULL,strcpy想把 hello world 拷貝到str指向的空間時(shí),程序就崩潰了。因?yàn)镹ULL指向的空間是不能直接訪問的,造成了非法訪問;
- 3.malloc開辟的空間沒有free釋放也沒有制空,程序不結(jié)束就會(huì)一直存在,造成了內(nèi)存泄漏;
正確改正方式為:
題目二 (返回??臻g地址的問題 )
請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?
此類問題是 : 返回??臻g地址的問題
答 :
程序運(yùn)行打印的是隨機(jī)值 ;
原因 :
GetMemory函數(shù)返回的p是數(shù)組名,也就是數(shù)組首元素h的地址 ;
但是 ! GetMemory函數(shù)創(chuàng)建是在??臻g上創(chuàng)建的,return后會(huì)銷毀,空間還給操作系統(tǒng),雖然下面Test函數(shù)中的str存了h的地址,但是如果進(jìn)行打印,原來的空間已經(jīng)被銷毀,打印的內(nèi)容自然不是想要的內(nèi)容;(雖然有可能依然打印出 hello world ,那是因?yàn)榭臻g暫時(shí)還沒被覆蓋使用,本質(zhì)上依然是錯(cuò)誤的)。
題目三 (區(qū)別傳值調(diào)用的傳址調(diào)用)
請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?
答 :
雖然能成功打印出 hello world ,但是造成了內(nèi)存泄漏 , 要記得 free 釋放和制空 ;
原因 :
這里傳的是str的地址,區(qū)別題目1的傳值調(diào)用,這里是傳址調(diào)用,形參的改變能影響實(shí)參;
malloc開辟的空間地址交給了str ,str指向了這塊空間,所以strcpy能成功使用這塊空間實(shí)現(xiàn)打印內(nèi)容;
但是沒有釋放malloc動(dòng)態(tài)開辟的這塊空間,也沒有制空,造成了內(nèi)存泄漏 ;
題目四 (free釋放的時(shí)機(jī))
請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?
這道題比較簡單 ,解析給在了代碼注釋中 ,大家注意查看 。
🎇結(jié)尾:
有關(guān)這四道經(jīng)典的指針筆試題講解就到此結(jié)束了,如果覺得文章對(duì)自己有所幫助,歡迎大家多多點(diǎn)贊收藏✨ ~
到此這篇關(guān)于C語言經(jīng)典指針筆試題詳解的文章就介紹到這了,更多相關(guān)C語言 指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux環(huán)境g++編譯GDAL動(dòng)態(tài)庫操作方法
下面小編就為大家?guī)硪黄狶inux環(huán)境g++編譯GDAL動(dòng)態(tài)庫操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05C語言SetConsoleTextAttribute函數(shù)使用方法
這篇文章介紹了C語言SetConsoleTextAttribute函數(shù)的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí)詳解
這篇文章主要介紹了C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10C語言之實(shí)現(xiàn)棧的基礎(chǔ)創(chuàng)建
這篇文章主要介紹了C語言之實(shí)現(xiàn)棧的基礎(chǔ)創(chuàng)建,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Protocol Buffer技術(shù)深入理解(C++實(shí)例)
C++實(shí)例Protocol Buffer技術(shù)詳解,感興趣的朋友可以了解下2013-01-01剖析C++編程中friend關(guān)鍵字所修飾的友元函數(shù)和友元類
這篇文章主要介紹了剖析C++編程中friend關(guān)鍵字所修飾的友元函數(shù)和友元類,友元了以后在外部就可以訪問到正常情況下無法訪問到的私有屬性和方法,需要的朋友可以參考下2016-01-01