对于c++的cout自动判断类型,它对于字符串是如下处理的
1.对于cout<< 字符串某一元素地址;它会输出从该字符开始到'\0'为止的全部字符相当于printf("%s",p2);
2.输出单个字符和c语言相似,cout<< *p2;printf("%c",*p2);
3.输出字符串某一元素地址,c++只会对char*类型的有这样的一种特殊判断,所以需要转换类型(void*)后再输出,而c只需要如下文所示的方法就行
下面是对于这一写法p2真正类型的探讨,有以下4种可能:
1.char * 若是单纯的char*,那么p2可以修改其自身的值,也可以修改其所指对象的值
2.const char * 不允许修改所指对象的值,但可以修改自身的值(下面的例子可以证明,即使修改所指对象的值可以通过编译,但也会被系统中断)
3.char * const 但可以修改所指对象的值
4.const char * const 不允许修改自身的值和所指对象的值
char *p2="abcd";这种写法编译器会给出warning,还是尽量不要用了
[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
cin cout和scanf printf,我记得这两种输入输出不太兼容,有时会出错,勿要混用
//对于c++的cout自动判断类型,它对于字符串是如下处理的
//1.对于cout<< 字符串某一元素地址;它会输出从该字符开始到'\0'为止的全部字符
//相当于printf("%s",p2);
//2.输出单个字符和c语言相似,cout<< *p2;printf("%c",*p2);
//3.输出字符串某一元素地址,c++只会对char*类型的有这样的一种特殊判断,
//所以需要转换类型(void*)后再输出,而c只需要如下文所示的方法就行
//下面是对于这一写法p2真正类型的探讨,有以下4种可能:
//1.char * 若是单纯的char*,那么p2可以修改其自身的值,也可以修改其所指对象的值
//2.const char * 不允许修改所指对象的值,但可以修改自身的值
//(下面的例子可以证明,即使修改所指对象的值可以通过编译,但也会被系统中断)
//3.char * const 但可以修改所指对象的值
//4.const char * const 不允许修改自身的值和所指对象的值
//char *p2="abcd";这种写法编译器会给出warning,还是尽量不要用了
//[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
//cin cout和scanf printf,我记得这两种输入输出不太兼容,有时会出错,勿要混用
#include<iostream>
//#include<cstdio>
using namespace std;
int main()
{
char *p2
cout << *p2 << endl;//a
cout << p2 << endl;//abcd
cout << &p2 << endl;//0x22fe40
//printf("%p\n",&p2);//000000000022fe40
void *p=p2;
cout << p << endl;//0x488000
//printf("%p\n",p2);//0000000000488000
char *p1;
p1=p2;
cout << p1 << endl;
//char p3[]=p2;//error
char *p4=p2;
char p3[]="abcd";
p3[0]='b';
cout<< p3 << endl;
//p2[0]='b';//error
p2="dcba";
cout << p2 << endl;
return 0;
}