摘要:結尾有關這四道經典的指針筆試題講解就到此結束了,如果覺得文章對自己有所幫助,歡迎大家多多點贊收藏
今天博主來講解4道經典的指針筆試題,很多朋友沒有深刻理解函數傳參知識都會在這些題目上出錯,下面話不多說,我們開始 ~
請問運行Test 函數會有什么樣的結果?
答 :
程序運行會崩潰 ! 且存在內存泄漏 ;
原因:
1.str傳給p的時候,是值傳遞,p是str的臨時拷貝,所以當malloc開辟的空間起始地址放在p中的時候,不會影響str,str依然為空指針NULL ;
2.當str是NULL,strcpy想把 hello world 拷貝到str指向的空間時,程序就崩潰了。因為NULL指向的空間是不能直接訪問的,造成了非法訪問;
3.malloc開辟的空間沒有free釋放也沒有制空,程序不結束就會一直存在,造成了內存泄漏;
正確改正方式為:
請問運行Test 函數會有什么樣的結果?
此類問題是 : 返回棧空間地址的問題
答 :
程序運行打印的是隨機值 ;
原因 :
GetMemory函數返回的p是數組名,也就是數組首元素h的地址 ;
但是 ! GetMemory函數創建是在棧空間上創建的,return后會銷毀,空間還給操作系統,雖然下面Test函數中的str存了h的地址,但是如果進行打印,原來的空間已經被銷毀,打印的內容自然不是想要的內容;(雖然有可能依然打印出 hello world ,那是因為空間暫時還沒被覆蓋使用,本質上依然是錯誤的)。
請問運行Test 函數會有什么樣的結果?
答 :
雖然能成功打印出 hello world ,但是造成了內存泄漏 , 要記得 free 釋放和制空 ;
原因 :
這里傳的是str的地址,區別題目1的傳值調用,這里是傳址調用,形參的改變能影響實參;
malloc開辟的空間地址交給了str ,str指向了這塊空間,所以strcpy能成功使用這塊空間實現打印內容;
但是沒有釋放malloc動態開辟的這塊空間,也沒有制空,造成了內存泄漏 ;
請問運行Test 函數會有什么樣的結果?
這道題比較簡單 ,解析給在了代碼注釋中 ,大家注意查看 。
有關這四道經典的指針筆試題講解就到此結束了,如果覺得文章對自己有所幫助,歡迎大家多多點贊收藏? ~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/121853.html
摘要:因為指針指向的是整個數組,所以它的類型是數組指針,所以我們在它的前面進行強制類型轉換,把它轉換為類型,然后再存放到指針變量內部。 前言 通過8道指針筆試題的解析,可以充分的復習到指針的相關知識,并且題目中會結合許多之前的相關知識,希望通過本篇文章,對大家所學的知識進行一個復習。 提示:以下...
摘要:所以是數組指針,而是指針數組。因為對一個二維數組,可以不知道有多少行,但是必須知道一行多少元素。當二維數組數組名傳參,形參接收時,數組的行可以省略,列不能省略,如果省略了列,我們就無法知道當指針加減跳過幾個字節。 ...
摘要:包含基于和標準的表示使用進行動態顯示和交互使用與服務器進行異步通信使用綁定一切。重定向表示要完成請求,需要進一步操作。方法可將一個函數的對象上下文從初始的上下文改變為由指定的新對象。 一. 什么是Ajax??? 術語Ajax用來描述一組技術,它使瀏覽器可以為用戶提供更為自然的瀏覽體驗。 Ajax它是Asynchronous JavaScript + XML的簡寫 定義Ajax: ...
摘要:包含基于和標準的表示使用進行動態顯示和交互使用與服務器進行異步通信使用綁定一切。重定向表示要完成請求,需要進一步操作。方法可將一個函數的對象上下文從初始的上下文改變為由指定的新對象。 一. 什么是Ajax??? 術語Ajax用來描述一組技術,它使瀏覽器可以為用戶提供更為自然的瀏覽體驗。 Ajax它是Asynchronous JavaScript + XML的簡寫 定義Ajax: ...
閱讀 2036·2023-04-25 23:30
閱讀 1455·2021-11-24 10:18
閱讀 3084·2021-10-09 09:54
閱讀 2022·2021-10-08 10:05
閱讀 3443·2021-09-23 11:21
閱讀 3167·2019-08-30 15:52
閱讀 1566·2019-08-30 13:05
閱讀 1063·2019-08-30 13:02