在c語言中 C語言中的指標和字串

2021-10-14 19:42:10 字數 1771 閱讀 6739

之前我們說過關於字元的一些內容,字元的原理,歸根到底就是將我們常用的一些字元根據編號整理成一張統一的表,每個字元對應著這個表裡面的乙個數值,這一過程就是字元的編碼。

然而大多數時候我們根本就不會使用單個字元,比如計算機上面要輸出一句句子"hello world",這個句子裡面就是由多個字元所組成的,分別是"h","e","l","l","o","(空格也是字元)","w","o","r","l","d",這種由多個字元組成的句子,在c語言中被稱為"字串"。

了解完字串是由多個字元組成的之後,想要儲存字串就變得非常容易了,我們只需要定義多個變數來儲存這些字元就可以了,如要輸出"hello",我們只需要定義五個字元型變數來儲存這些字元,然後就可以做一些處理。如,列印出"hello",如圖1所示。

這樣就可以列印出乙個"hello"的句子出來了,但是,這種分布式字元組成字串的方式在做字串處理的時候,非常吃力,最好的方式就是可以將這些字元儲存到乙個集群式的變數裡面,我們c語言中集群式的儲存型別只有陣列一種型別,因此上面的程式中的五個變數可以改造成乙個陣列,這個陣列定義好之後就可以用來存放這些字元了。改造完成的程式如圖2所示。

上面的字串中字元是被乙個乙個存入陣列中的,這種方式顯得有些繁瑣,特別是操作字串的時候,還需要使用for語句進行迴圈操作,這樣在使用字串的時候,操作的時候太過於麻煩。我們還可以再改造一下上面的程式。在c語言中,定義用雙引號""""包住的一句句字有乙個特殊的稱呼,它就叫字串。同時在c語言中使用"printf"函式的時候,還有特殊適配符去適配這種資料型別。對圖6-5-2中的程式改造如圖3所示。

上面的程式中,我仔細看可以發現,列印輸出的結果有些不正常,就是在hello列印完成之後有多輸出了乙個"?"。這是程式的乙個小bug,出現的原因是,當我們使用字串去賦值給乙個陣列的時候,除了這個字串正常的字元之外,在最後乙個字元結束之後,字串會額外增加乙個'0'字元,這個'0'字元就是字串結束的乙個標誌性字元,沒有實際意義,而當我們給乙個長度為5的陣列中存入"hello"字串時,實際上是會存入6個字元,而用printf函式的%s適配時,由於檢測不到'0'字元,所以函式不會停地列印字元,直到遇到'0'。修改的方式很簡單,只需要將字元的長度增加乙個即可,如圖4所示。

雖然程式中的問題解決了,但是這種方法是不是意味著每次給陣列賦值字串的時候,都需要去數這個字串裡面有多少個字元,然後加1,再去定義乙個陣列呢?顯然不是,如果真要這樣的話,那麼c語言可能早就被淘汰了。其實在給乙個陣列初始化賦值乙個字串的時候,我們根本就不需要去顯示地指出這個字串的長度,如圖5所示。

說到這裡,我們其實就可以明白,字串的本質其實就是字元型陣列,因此當我們使用指標操作的時候,也只需要像運算元組一樣去操作字串即可。基於上面的程式,我們可以定義乙個字元型指標去指向乙個字串,這樣,這個字串指標具有這個陣列的特性。如圖6所示。

以上就是關於指向字串指標的定義,指標在平時使用中有很多情況都是來處理一些字串資料的,我們在後面的章節會繼續討論這個問題。

指標在C語言中的應用

指標 pointer 就是記憶體的位址,c語言允許用乙個變數來存放指標,這種變數成為指標變數。指標變數可以存放基本型別資料的位址,也可以存放陣列 函式 以及其他指標變數的位址。程式在執行過程中需要的是資料和指令的位址,變數名 函式名 字串名和陣列名在本質上是一樣的,他們丟失位址的助記符 在編寫 的過...

C 語言中的指標

指標是 c 語言中的精華,正確靈活的運用指標,可以表示複雜的資料結構,動態分配記憶體,方便使用字串和陣列,呼叫函式返回多結果,直接處理記憶體單元等等。位址就是記憶體的編號,如果拿旅店作為記憶體,那麼每個房間號其實就相當於位址了。當程式編譯時,就會對變數分配記憶體單元,分配時按變數型別分配大小。經過編...

C語言中的指標

隨著程式語言的越來越多,但c語言在程式語言中的地位似乎始終沒有改變,其中得益於c語言中的指標,可以直接去操作記憶體位址與暫存器,執行效率也高,在嵌入式領域運用得尤其廣泛。對於初學者來說指標是c語言中很難翻越的一座大山,指標的掌握程度直接關係到c語言的掌握程度,其實指標並不是那麼高不可攀,只是紙老虎而...