函數的形參與返回

函數中形參與實參的傳遞實質:

函數在調用時,會把實參變量的值複製給形參變量,即實參與形參是兩個不同的變量。形參的變量在函數返回後釋放內存


①改變形參指針的值:

實參和形參的值都爲內存地址,指向同一個內存空間,當形參改變後,即形參指向的內存地址改變後,並不會影響到實參。




②改變形參指針指向的內存:

實參和形參的值都爲內存地址,指向同一個內存空間,當形參直接改變對應的內存空間後,即形參指向的內存地址對應的內存存放的內容改變後,同時影響到實參指向的內存地址存放的內容。


③即指針的引用 (class *&var)

實參和形參實際上是同一個變量,指向同一個內存空間




函數的返回實質就是,把返回的值複製一個副本而已。

字符串常量和字符數組的區別 字符串常量放在字符串文字量存儲區,而字符數組是每一個字符都轉換爲ascii碼。一般的來說,函數是可以返回局部變量的,函數一般的操作是把局部變量複製後返回給調用者,不能返回局部變量的是指針,因爲函數只是把指針複製後返回了,但是指針指向的內容已經被釋放了,這樣指針指向的內容就是不可預料的內容,調用就會出錯,具體還需要看指針指向的內容存放在哪個存儲區

char *p="hello world!"; 沒問題,返回的是字符串常量("hello world!")的地址,指針指向的內容(存放在靜態區)在函數結束後還能正常訪問。 

char p[]="hello world!"; 有問題,返回的是局部變量(數組p)的地址,指針指向的內容(數組p)存放在棧中函數結束後釋放內存

static char p[]="hello world!";沒問題,返回的是靜態局部變量(數組p)的地址,指針指向的內容(數組p)數組存放在靜態區在函數結束後還能正常訪問
 


函數返回全局變量的迭代器(迭代器的實質是指針),函數結束後可以正常訪問迭代器指向的元素

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章