函數中形參與實參的傳遞實質:
函數在調用時,會把實參變量的值複製給形參變量,即實參與形參是兩個不同的變量。形參的變量在函數返回後釋放內存
①改變形參指針的值:
實參和形參的值都爲內存地址,指向同一個內存空間,當形參改變後,即形參指向的內存地址改變後,並不會影響到實參。
②改變形參指針指向的內存:
實參和形參的值都爲內存地址,指向同一個內存空間,當形參直接改變對應的內存空間後,即形參指向的內存地址對應的內存存放的內容改變後,同時影響到實參指向的內存地址存放的內容。
③即指針的引用 (class *&var)
實參和形參實際上是同一個變量,指向同一個內存空間
函數的返回實質就是,把返回的值複製一個副本而已。
字符串常量和字符數組的區別 字符串常量放在字符串文字量存儲區,而字符數組是每一個字符都轉換爲ascii碼。一般的來說,函數是可以返回局部變量的,函數一般的操作是把局部變量複製後返回給調用者,不能返回局部變量的是指針,因爲函數只是把指針複製後返回了,但是指針指向的內容已經被釋放了,這樣指針指向的內容就是不可預料的內容,調用就會出錯,具體還需要看指針指向的內容存放在哪個存儲區
char *p="hello world!"; 沒問題,返回的是字符串常量("hello world!")的地址,指針指向的內容(存放在靜態區)在函數結束後還能正常訪問。
char p[]="hello world!"; 有問題,返回的是局部變量(數組p)的地址,指針指向的內容(數組p)存放在棧中函數結束後釋放內存
static char p[]="hello world!";沒問題,返回的是靜態局部變量(數組p)的地址,指針指向的內容(數組p)數組存放在靜態區在函數結束後還能正常訪問
函數返回全局變量的迭代器(迭代器的實質是指針),函數結束後可以正常訪問迭代器指向的元素