摘要:結(jié)尾有關(guān)這四道經(jīng)典的指針筆試題講解就到此結(jié)束了,如果覺得文章對(duì)自己有所幫助,歡迎大家多多點(diǎn)贊收藏
今天博主來(lái)講解4道經(jīng)典的指針筆試題,很多朋友沒有深刻理解函數(shù)傳參知識(shí)都會(huì)在這些題目上出錯(cuò),下面話不多說(shuō),我們開始 ~
請(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)存泄漏;
正確改正方式為:
請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?
此類問題是 : 返回棧空間地址的問題
答 :
程序運(yùn)行打印的是隨機(jī)值 ;
原因 :
GetMemory函數(shù)返回的p是數(shù)組名,也就是數(shù)組首元素h的地址 ;
但是 ! GetMemory函數(shù)創(chuàng)建是在棧空間上創(chuàng)建的,return后會(huì)銷毀,空間還給操作系統(tǒng),雖然下面Test函數(shù)中的str存了h的地址,但是如果進(jìn)行打印,原來(lái)的空間已經(jīng)被銷毀,打印的內(nèi)容自然不是想要的內(nèi)容;(雖然有可能依然打印出 hello world ,那是因?yàn)榭臻g暫時(shí)還沒被覆蓋使用,本質(zhì)上依然是錯(cuò)誤的)。
請(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)存泄漏 ;
請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?
這道題比較簡(jiǎn)單 ,解析給在了代碼注釋中 ,大家注意查看 。
有關(guān)這四道經(jīng)典的指針筆試題講解就到此結(jié)束了,如果覺得文章對(duì)自己有所幫助,歡迎大家多多點(diǎn)贊收藏? ~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/121853.html
摘要:因?yàn)橹羔樦赶虻氖钦麄€(gè)數(shù)組,所以它的類型是數(shù)組指針,所以我們?cè)谒那懊孢M(jìn)行強(qiáng)制類型轉(zhuǎn)換,把它轉(zhuǎn)換為類型,然后再存放到指針變量?jī)?nèi)部。 前言 通過(guò)8道指針筆試題的解析,可以充分的復(fù)習(xí)到指針的相關(guān)知識(shí),并且題目中會(huì)結(jié)合許多之前的相關(guān)知識(shí),希望通過(guò)本篇文章,對(duì)大家所學(xué)的知識(shí)進(jìn)行一個(gè)復(fù)習(xí)。 提示:以下...
摘要:所以是數(shù)組指針,而是指針數(shù)組。因?yàn)閷?duì)一個(gè)二維數(shù)組,可以不知道有多少行,但是必須知道一行多少元素。當(dāng)二維數(shù)組數(shù)組名傳參,形參接收時(shí),數(shù)組的行可以省略,列不能省略,如果省略了列,我們就無(wú)法知道當(dāng)指針加減跳過(guò)幾個(gè)字節(jié)。 ...
摘要:包含基于和標(biāo)準(zhǔn)的表示使用進(jìn)行動(dòng)態(tài)顯示和交互使用與服務(wù)器進(jìn)行異步通信使用綁定一切。重定向表示要完成請(qǐng)求,需要進(jìn)一步操作。方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛芍付ǖ男聦?duì)象。 一. 什么是Ajax??? 術(shù)語(yǔ)Ajax用來(lái)描述一組技術(shù),它使瀏覽器可以為用戶提供更為自然的瀏覽體驗(yàn)。 Ajax它是Asynchronous JavaScript + XML的簡(jiǎn)寫 定義Ajax: ...
摘要:包含基于和標(biāo)準(zhǔn)的表示使用進(jìn)行動(dòng)態(tài)顯示和交互使用與服務(wù)器進(jìn)行異步通信使用綁定一切。重定向表示要完成請(qǐng)求,需要進(jìn)一步操作。方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛芍付ǖ男聦?duì)象。 一. 什么是Ajax??? 術(shù)語(yǔ)Ajax用來(lái)描述一組技術(shù),它使瀏覽器可以為用戶提供更為自然的瀏覽體驗(yàn)。 Ajax它是Asynchronous JavaScript + XML的簡(jiǎn)寫 定義Ajax: ...
閱讀 2022·2023-04-25 23:30
閱讀 1451·2021-11-24 10:18
閱讀 3068·2021-10-09 09:54
閱讀 2017·2021-10-08 10:05
閱讀 3431·2021-09-23 11:21
閱讀 3161·2019-08-30 15:52
閱讀 1560·2019-08-30 13:05
閱讀 1056·2019-08-30 13:02