在編寫c/c++代碼時,調用函數的書寫讓程序變得整潔易讀,但是調用函數的返回值(局部變量的返回值,變量,結構體,數組等)也有注意事項。c/c++嚴禁返回局部變量的指針或引用。 其實函數的返回值的規則非常好記: 函數的返回值可以是數值和全局變量的指針或引用。 函數的返回值不能是局部對象 ...
原則:盡量不要返回一個局部變量的指針或引用,因為函數執行完之后,將釋放分配給局部變量的存儲空間,局部變量只是臨時的存儲空間,此時,對局部變量的引用和地址就會返回不確定的內存,但可以返回局部變量本身,局部變量實際上是返回變量值的拷貝,雖然在函數調用結束后所在內存會被釋放回收掉,但返回值不是地址,而是局部變量的拷貝副本。 .返回局部變量 沒有問題 .返回局部變量指針 出現錯誤 總結 局部變量: 局部 ...
2020-02-12 13:19 0 1098 推薦指數:
在編寫c/c++代碼時,調用函數的書寫讓程序變得整潔易讀,但是調用函數的返回值(局部變量的返回值,變量,結構體,數組等)也有注意事項。c/c++嚴禁返回局部變量的指針或引用。 其實函數的返回值的規則非常好記: 函數的返回值可以是數值和全局變量的指針或引用。 函數的返回值不能是局部對象 ...
遇到過好幾次關於函數返回指針變量問題,有時候是可以的,有時候是不可以的,然后就混亂了。今天研究了下,結果發現原來和內存分配有關。 用下面的例子分析下吧: 這段p是局部指針,指向局部數組a,這種情況輸出為空或者奇怪字符串。 分析: a是局部數組,系統為其分配的是棧內存,test ...
指針是一個存儲計算機內存地址的變量。從指針指向的內存讀取數據稱作指針的取值。指針可以指向某些具體類型的變量地址,例如int、long和double。指針也可以是void類型、NULL指針和未初始化指針。 根據出現的位置不同,操作符 * 既可以用來聲明一個指針變量 ...
01 不能直接返回局部變量的引用/地址 C++有時候還挺傻的,比如調用函數的時候,我就想返回一個局部變量的引用或指針(常想用於返回新建的數組/對象),是不正確的。 比如下面這段代碼,用指針存儲變量 \(a\) 的地址並返回(直接返回 \(a\) 的地址的話,在編譯器那關就過 ...
first:1 *p is:2 second:2 first:1 a is:2 second:1 結論:當指針變量作為參數進行傳參操作時,方法內部對變量進行操作,同時 也會影響傳入的指針變量的值,因為他們指向的是同一塊存儲空間的數據 可參考圖: ...
一:指針變量 如下圖所示,定義一個指針變量*Ip,通常的理解,如果使用IP打印或者是retrun時,都是調用的ip這個指針變量指向的內存地址,如上面的打印,分別用了%P,%d來打印其指向的內存地址 ,因為內存地址是無符號整型數,所以用%p打印的話是16進制 ...
指針是一個特殊的變量,它里面存儲的數值被解釋成為內存里的一個地址。 要搞清一個指針需要搞清指針的四方面的內容: 指針的類型, 指針所指向的 類型, 指針的值或者叫指針所指向的內存區, 還有指針本身所占據的內存區。 讓我們分別說明。 先聲明幾個指針放着做例子: 例 ...
c語言 返回局部變量 局部指針 局部數組 內存四區模型 討論這個問題之前,一定要理解堆區和棧區的工作原理,數據的存儲區域(參考內存四區模型),另外一定不要返回局部對象或變量的引用和指針。 局部變量 局部變量分局部自動變量和局部靜態變量,由於c返回的是值,因此返回一個 ...