指標等於字串?

來源:互聯網
上載者:User

前幾天和朋友聊天,他對 char *s="hello"; 這種寫法感到不理解,說怎麼把一個字串賦值給了一個指標呢?代表什麼意思呢?其實細細的研究這個問題,可以這樣理解:首先這句代碼是存在於某個函數之中,或者是全域的。如果是存在於一個函數之中,像這樣:

void somefunc()
{
 char *s="hello";
 MessageBox(0,s,s,MB_OK);

那麼程式在進入這個函數之後,"hello"作為一個字串常量被分配在該函數的棧空間裡面,共佔有6個位元組的空間,而在這個字串常量的首地址,將被用來初始化s。函數執行完畢,返回的時候,該函數的棧空間會被全部釋放(字串常量"hello"和指標s都在該函數的棧空間中,所以都會被釋放),不用擔心記憶體泄露的發生。

如果 char *s="hello"; 不在任何函數內,那麼這句代碼是全域範圍的,在程式的整個生命週期和任何範圍內都可以訪問到s這個變數。那麼這個時候,"hello"作為一個字串常量存在於程式的全域常數區,在程式剛開始啟動並執行時候,"hello"常量和s都會被建立在全域常量區和變數區,並且會自動的拿"hello"的首地址初始化s。程式退出的時候,都會被自動的釋放。

 和這句代碼類似的寫法有很多,比如調用 API 函數的時候,可以這樣寫: MessageBox(0,"hello","hello",MB_OK);
這就是字串傳遞給char*參數,原理也是一樣的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.