
char* Sp="Example One";
char Sa[]="Two";
cout<
string* Ss=new string(Sa); //Sa为以上的字符数组
cout<
char
*p="hello
world";这样赋值是允许的。那么这并不代表"hello
world"这个就是一个指针,实际上我们的这一动作,编译器在幕后为我们做了很多事,首先在常量区分配一个字符数组,然后将"hello
world"这个字符串中的字符(包括最后的'\0'字符。)拷贝到此数组(其实此数组我们可以看成是一个匿名数组,因为没有数组名)。然后返回数组首元素的地址,将此地址赋值给字符指针变量p。我们知道在c语言中没有字符串这种类型,在c语言中的字符串是通过字符数组来实现的,而且必须要求此字符数组具有'\0'结束符。这就是字符串与一般的字符数组不同的地方。
话说回来,你问到为什么char
*p="hello
world";
cout<这就是cout的行为,没有为什么。
其实你自己可以写一个自己的cout函数,输出地址而不是按照cout的默认行为。当然要实现cout的功能,必须要了解很多底层知识。
我们可以通过这样的方式输出字符察码指针的值,而不是输出以其为首地址的字符串。例如char
a='A';
char
*p=&a;
cout<<(int)(p)<
你这个问题问得很好,我们知道实际上一个字符串在进行赋值的时候,例如: char *p="hello world";这样赋值是允许的。那么这并不代表"hello world"这个就是一个指针,实际上我们的这一动作,编译器在幕后为我们做了很多事,首先在常量区分配一个字符数组,然后将"hello world"这个字符串中的字符(包括最后的'\0'字符。)拷贝到此数组(其实此数组我们可以看成是一个匿名数组,因为没有数组名)。然后返回数组首元素的地址,将此地址赋值给字符指针变量p。我们知道在c语言中没有字符串这种类型,在c语言中的字符串是通过字符数组来实现的,而且必须要求此字符数组具有'\0'结束符。这就是字符串与一般的字符数组不同的地方。
话说回来,你问尘漏到为什么char *p="hello world"; cout<
我们可以通过这样的方式输出字符指针的值,而不是输出以其为首地址的字符串。例如char a='A'; char *p=&a; cout<<(int)(p)<
string *就是一个普通的指针了, 想看成字符串也旦伍没法弄
char *sp="example one"启锋;
char sa[]="two"雹链;
cout<<&sp[0];得到地址
cout<<&sa[0];得到地址源旁孙
cout << *Ss;