char指標簡單應用

來源:互聯網
上載者:User
 

首先看看下面的代碼:

char *p;
p="abc";
你認為是對的嗎?
答案:文法上是對的,但不提倡這種寫法。

誤區1:沒有給p分配記憶體空間就賦值,怎麼會是對的呢?
正解:不少人第一眼將這裡的p="abc"看成了*p="abc",然後就做出了以上的論斷。這是比較笨笨的錯誤。

看清楚就好啦,其實賦給p的是"abc"的地址。再說,*p="abc"也不對呀,字串可不能這麼賦值。

誤區2:這"abcd"哪來的地址,怎麼能直接賦給p呢?
正解:先自己試試吧。在2K/XP +vc下運行這段這斷代碼,是不會出錯的,說明這段代碼並無問題。猜想的話呢,就是"abcd"不知道被放在了什麼地方,然後弄來了一個地址,給了p。

這到底是怎麼回事呢?

要知道,這兩個語句和char *p="abc"是完全一樣的,所以其中的道理也一樣。
char *p="abc"曾經迷惑了不少人呀。問問你:p到底是什麼類型的?char *?錯,是const char *!
也就是說,它所指向的內容是不可改變的。不過要補充的是,a的指向是可以改變的。
所以為了不再引起誤會,char *p="abc這種寫法是不提倡的。
既然char *p="abcd"被建議寫成const char *p="abcd",那麼char *p; p="abcd";也應該寫成const char *p; p="abcd";

講解:

const char *p="abc"中的"abc",在編譯期間就已經處理好,要了一塊記憶體,存起來了!

而char p[]="abc"中的"abc",是在運行期間動態分配記憶體給"abc",然後再算出地址,賦給p。

指標是沒有分配空間的地址而已,而數組是一種容器,佔用連續的儲存空間。

字串就該知道它是一個數組!而不是指標!

真正意義上的指標只能是地址,而它在分配了連續的空間後可以作為數組來使用。

引用字串的最佳格式是const char *指標,但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.