C++中字符指針的輸出

ostream類中對運算符<<的重載(void*與char*)

因為之前一直對cout<<輸出有著很大的疑惑,例如以下代碼中的輸出疾党,對于整型指針輸出的是地址,而對于字符指針輸出的是字符串肺孤。

#include <iostream>
int main()
{
    int a = 1;
    int *aptr = &a;
    std::cout << aptr<<std::endl;
    char *b = "string";
    std::cout << b<<std::endl;

    /*輸出
    00EFF760
    string
    */
}

查閱了相關(guān)資料之后,我得知C++中ostream類對于運算符<<有重載,傳入不同參數(shù)的時候會有不同的效果眠菇。
以下是一個小測試毁枯,證明上述結(jié)論慈缔。

#include <iostream>
#include<string>
int main()
{
    using namespace std;
    char *str = NULL;
    cout << "&str=" << &str<<endl;            //str指針存放的地址
    //cout << "str=" << str << endl;          //str指針的值為空,異常
    cout << "str =" << (void*)str << endl;    //強制類型轉(zhuǎn)換為空指針种玛,可以輸出其空值為0
    //int*a=NULL;cout << a;                   
    
    /*輸出
    &str=012FFC7C
    str =00000000
    */

    cout << "-------這里是分割線--------" << endl;
    str = new char[20];
    str = "string";
    cout << "&str=" << &str << endl;           //str指針存放的地址,與上面相同
    cout << "str =" << str << endl;            //str指針所指向的字符串
    cout << "str =" << (void*)str << endl;     //字符串的首地址
    cout << "*str=" << *str << endl;           //輸出字符數(shù)組第一個元素
    void *test = str;
    cout << "test=" << test<<endl;             //字符串的首地址

    /*輸出
    &str=00C4F8E4
    str =string
    str =00CB9B64
    *str=s
    test=00CB9B64
    */

    //由此可以看出頭文件ostream中藐鹤,運算符<<對void*和char*有著不同的運算符重載,導致了輸出結(jié)果不同

    str = '\0';
    delete[] str;
    return 0;
}

翻閱C++PrimerPlus可以得知

ostream類還為下面的指針類型定義了插入運算符函數(shù)
const signed char*;
const unsigned char*
const char*;
void *;

由此可見C++對于char*是有差別對待的赂韵,對char*s輸出的是字符串娱节,而其他指針例如double*,float*祭示,int*等等使用的是void*這個重載肄满。所以輸出的才是地址值
以下對void*進行簡單探尋。

void指針

void指針表示的是空類型指針,但實際指代的是任意類型指針稠歉,我們經(jīng)酬#可以在函數(shù)形參中發(fā)現(xiàn)它,實際上怒炸,空類型指針只能儲存地址带饱,但是不可以對空指針進行類似于自增,解引用等操作阅羹。個人現(xiàn)在感覺空指針特別有用纠炮。

輸入流中對于字符指針的思考

以前經(jīng)常犯的錯誤便是

char *s;
std::cin>>s;

這樣每當輸入一個字符串之后程序便出現(xiàn)無法將值輸入字符指針s了,最近讀了C++PrimerPlus的關(guān)于字符串的部分灯蝴,有了很深刻的認識恢口,意識到必須給char*s這個字符指針new一個空間,才可以在cin>>對其進行更改

#include<iostream>
#include<string>
int main()
{
    std::cout << "Enter the word" << std::endl;
    char *s=new char[100];
    std::cin >> s;
    int count=0;
    while (strcmp(s, "#") != 0) 
    {
        count++;
        std::cin >> s;

    }
    std::cout << count << "words"<< std::endl;
    return 0;
}

小結(jié)

在學校用的那本C++課本實在是太淺了穷躁,頂多只能入個門耕肩,真正想理解原理還得找老外的書看。自己這篇關(guān)于C++也是參考了很多資料才寫出來的问潭,深感不易猿诸,而且可能會有不少錯誤,望指出狡忙。

參考資料:

http://blog.csdn.net/ncepuwanghui/article/details/23712735
http://blog.csdn.net/yahohi/article/details/7551876
http://blog.sina.com.cn/s/blog_8961925401016t9y.html
《C++PrimerPlus第6版中文版》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梳虽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子灾茁,更是在濱河造成了極大的恐慌窜觉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件北专,死亡現(xiàn)場離奇詭異禀挫,居然都是意外死亡,警方通過查閱死者的電腦和手機拓颓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門语婴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驶睦,你說我怎么就攤上這事砰左。” “怎么了场航?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵缠导,是天一觀的道長。 經(jīng)常有香客問我旗闽,道長酬核,這世上最難降的妖魔是什么蜜另? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮嫡意,結(jié)果婚禮上举瑰,老公的妹妹穿的比我還像新娘。我一直安慰自己蔬螟,他們只是感情好此迅,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旧巾,像睡著了一般耸序。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲁猩,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天坎怪,我揣著相機與錄音,去河邊找鬼廓握。 笑死搅窿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的隙券。 我是一名探鬼主播男应,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娱仔!你這毒婦竟也來了沐飘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤牲迫,失蹤者是張志新(化名)和其女友劉穎耐朴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恩溅,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡隔箍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脚乡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡滨达,死狀恐怖奶稠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捡遍,我是刑警寧澤锌订,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站画株,受9級特大地震影響辆飘,放射性物質(zhì)發(fā)生泄漏啦辐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一蜈项、第九天 我趴在偏房一處隱蔽的房頂上張望芹关。 院中可真熱鬧,春花似錦紧卒、人聲如沸侥衬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轴总。三九已至,卻和暖如春博个,著一層夾襖步出監(jiān)牢的瞬間怀樟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工盆佣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漂佩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓罪塔,卻偏偏與公主長得像投蝉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子征堪,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別瘩缆? C沒有Protection行為...
    阿面a閱讀 7,631評論 0 10
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,505評論 1 51
  • C/C++輸入輸出流總結(jié) 前兩天寫C++實習作業(yè),突然發(fā)現(xiàn)I/O是那么的陌生佃蚜,打了好長時間的文件都沒有打開庸娱,今天終...
    LuckTime閱讀 1,720評論 0 6
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風格之一谐算。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)熟尉; ...
    朱森閱讀 3,424評論 3 44
  • 凌晨2點了,給母親喂過藥洲脂,我開始想著母親的病能早點好起來斤儿。 今年的三九天平均溫度在零下13度,比往年似乎冷了很多恐锦,...
    洋芋蛋兒閱讀 373評論 3 2