對於字元型別的指標真的有很多很多要注意的地方,而且他是string,cstring等各種字串相互轉換的橋梁。
使用上稍不注意就會出錯。
1.初始化
char* pstr = "hello world.";
這是乙個指向字串常量的指標,也就是說hello wrold.是不能被修改的。因為它儲存在程式記憶體中的常量區。很多時候不注意就把pstr當做引數傳遞了。
所以我們初始化需要改變的字串時應該使用:
char pstr = "hello world.";
此時的pstr也可以看做指標,hello world.是儲存在臨時堆疊上的,超過作用域後會自動銷毀。但是其中的字元是可以改變的。
2.可以這樣初始化:
char* pc = new char[20];
char* pc = ;
但是不可以這樣初始化:
char c = new char[20];
3. char p = "hello";和char p = ;二者是不一樣的。
4. 作為引數傳遞時的錯誤:
void hello(char* p)
//呼叫
char* pc = null;
hello(pc);
這樣呼叫是錯誤的,因為函式中的p只是pc的乙個拷貝,此時相當於傳遞的是指標變數。程式執行會報錯。
真確的做法是:
void hello(char** p)
char* pc = null;
hello(&pc);
傳遞指標的指標。或者指標的位址。
5. 作為返回值時的情況:
char* getchar()
返回值指向的棧記憶體指標,並且不是null。
6. 指標操作時的情況:
char* c = new char[20]; //或char c[20];
for (int i=0;i<20;i++)
cout << c << endl;
此時並不能真確輸出c,因為c此時不再指向陣列的首位址了。
char* c = new char[20];
char* tc = c;
for (int i=0;i<20;i++)
cout << c << endl;
7. 指標與陣列:
c[2] === *(c+2)
c[2][3] === *(*(c+2)+3)
最後,例子只是一種表述,實際程式設計還得變通。
char 與char 型別的區別
參考文章 char s 和 char s 的區別小結 char s1 hello char s2 hello 區別所在 char s1 的s1是指標變數,而指標是指向一塊記憶體區域,它指向的記憶體區域的大小可以隨時改變,但當指標指向常量字串時,它的內容是不可以被修改的,否則在執行時會報錯。char ...
CHAR型別和VARCHAR型別
char和varchar類似,僅僅是儲存和檢索方式不同。char型別和varchar型別宣告的長度表示你想要儲存的最大字元數。但是char型別的長度是不可變的,varchar型別的長度是可變的 定義乙個char 10 和varchar 10 如果存進去的是 abcd 那麼char所佔的長度依然為10...
char 型別 127 1 128問題
最近準備面試,發現應屆生考的比較多的就是基礎,我面向c c 則做到的筆試題也有很多相關的題,其中就有charl型別變數a 127 a 1 的問題,這裡記錄一下自己的理解 我們知道char型別儲存的值的範圍是 128 127,127為正數的最大,再進行加一就會產生溢位操作 計算機內部計算都是使用的二進...