1. 程式人生 > 其它 >c++ 字串_C/C++每日一問為什麼字串可以賦值給字元指標變數?

c++ 字串_C/C++每日一問為什麼字串可以賦值給字元指標變數?

技術標籤:c++ 字串c++ 字串中的字元無效c++ 指標c++ 私有變數是字串指標c++ 私有變數是字串指標賦值c++變數重新賦值

b81f567fba4584f225579937d989e86c.png

C/C++每日一問

c93c7267051a9b2e6d0a190f06b86823.png

點選上方「嵌入式龍憨憨」,選擇「置頂/星標公眾號」第一時間檢視程式設計筆記!

ffb3684e1439a656068e1a7fe9efd8b5.png

特別設定【每日一問】專欄,對專業課--C/C++的複習的學習成果進行實踐檢驗以及知識拓展,裂變自己接觸和學習過的知識及技巧;主要是理論和實踐相結合,以基礎知識為主,實踐操作為輔,保證學習效果,和大家一起回顧知識,共同進步,加油!

特別提示:【每日一問】欄目包括但不限於【今日主題】、【實踐演練】、【知識裂變】等模組,內容比較基礎,適合新手學習以及熟手進行知識回顧,大神勿噴,請自動繞道,謝謝!

20cbbefdad71866b1a1b7c2377c1d5ac.png

1

今日主題

cee02b5f7124d5df33a334177bb393fe.png

有以下程式碼:

typedefchar*PCHAR;PCHARp1= 'a';//1PCHARp2="Hello";// 2PCHAR p3;charname[5]="John";p3=name;// 3

1、2、3條語句是否合法?

語句1不合法,語句2和3均合法。

由上可知,不能將字元賦值給字元指標變數,可以將字串賦值給指標變數。為什麼呢?

2

實踐演練

cee02b5f7124d5df33a334177bb393fe.png

為什麼不能將字元賦值給字元指標變數,可以將字串賦值給指標變數呢?

1、單引號和雙引號

1.1簡介

C語言中的單引號用來表示字元字面量

C語言中的雙引號用來表示字串字面量

如:

'a'表示字元字面量 ,在記憶體中佔1個位元組

'a'+1表示'a'的ASCII碼加1, 結果為'b'
"a"表示字串字面量 ,在記憶體中佔2個位元組

"a"+1表示指標運算,結果指向"a"結束符'\0'

1.2資料長度

單引號:單引號的資料長度固定,因為只有一個字元,所以資料長度為1。

雙引號:雙引號的資料長度不固定由字串的字元數量決定

2、具體分析

PCHAR p1 = 'a';// 1

單引號中的一個字元實際上代表一個整數,'a'對應ASCII碼的97,所以將一個整數賦值給指標變數初始化是不對的,指標變數需要用地址進行初始化

語句1可以改寫為以下程式碼,就是正確的。

charc='a';PCHARp1=&c;//1
PCHAR p2 = "Hello";// 2

語句2,"Hello"表示式使用的值就是這些字元所儲存的地址(在常量區),而不是這些字元本身。

雙引號做了3件事:

  • 1.申請了空間(在常量區),存放了字串

  • 2. 在字串尾加上了'/0'

  • 3.返回首字元地址

這裡將返回的地址賦值給了p2,所以可以用字串賦值給字元指標變數。

3、小結

單引號中的單個字元為字元字面量,被編譯為對應的ASCII碼,代表整數;

雙引號中的字元為字串字面量,被編譯為對應的記憶體地址,代表字元指標(即地址)

所以可以用字串對字元指標變數進行初始化賦值。

3

知識裂變

cee02b5f7124d5df33a334177bb393fe.png

1、typedef 關鍵字

1.1作用:

為一種資料型別定義一個新名字。這裡的資料型別包括內部資料型別(int,char等)和自定義的資料型別(struct等)。

在程式設計中使用typedef目的一般有兩個,一個是給變數一個易記且意義明確的新名字,另一個是簡化一些比較複雜的型別宣告。

typedef char* PCHAR;

PCHAR定義為char*的別名,看到PCHAR就相當於char*;

2、語句3中的知識點

CHAR p3;char name[5] = "John";p3 = name;// 3

語句3先對陣列name用字串初始化,name是陣列名,代表陣列的首地址,所以是可以賦值給字元指標變數的。

但是如果換種寫法:

char name[5]name ="John";

經典的錯誤,絕對的零分!

“John”賦的值是一個地址,而name雖然也有地址,但是和指標有所不同。

指標的值是地址,而陣列的值雖然也是地址,但是卻是一個常量,所以不能給常量賦值。

長按圖片關注 079a27e040460c42ee20b1f6a1eedd54.png

63fd12fcf8ae67ff321d001f5991957f.png

分享技術,碼字不易

轉發、在看就是我最大的動力

置頂/星標公眾號,和我一起學習吧