1,我定義了char *Pstr,這個Pstr明顯是個指針,為何輸出coutf<<Pstr<<endl;結果不是地址,而是整個字符串??2,當后面使用int的時候cout<<arr<<endl;結果卻是地址????結合1和2兩問題,int和char在這里有何不同??3,我想用sizeof()求“hello”的大小,怎么求?4,定義char str[]={'a','b','c','d','e','f','g','\0'}數組的時候,cout<<str<<endl;為何結果是整個字符串?不是地址???
3 回答

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
運算符重載可以做任何事情,沒有任何規則所只要是地址打印出就是地址。而且char*是特殊的,從來沒有在哪輸出過地址
運算符重載,不是int/char不同,而是重載后int*和char*不同
sizeof("hello"),這是唯一的辦法,賦值給指針后只能用strlen,不能用sizeof
同樣,不要總想著參數是地址,輸出也是地址,如果這樣,高級語言就太無用了

肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
1.因為 iostream內部 cin cout 對char* 做了特殊處理.......因為c/c++ 輸入輸出字符串通常要用到char*
如果直接輸出地址,就要用別的方法來輸出字符串了 就不方便了.....所以直接輸出地址 那里放著的字符串......
3、sizeof("hello");得到 字符串實際長度 + \0 占的一個字節
一般用strlen函數.......
同 1、2,str數組名 是 char* 地址

小唯快跑啊
TA貢獻1863條經驗 獲得超2個贊
1、這是cout(const char *)函數的定義。為方便處理字符串。
2、字符串是數組,int只是一個數;
3、include <string.h>
4、同1.
- 3 回答
- 0 關注
- 142 瀏覽
添加回答
舉報
0/150
提交
取消