C++ 字符数组和字符指针

C++ 字符数组和字符指针
指针是指向变量或者类的地址.但对于字符数组或字符串为什么不是.请帮我解释一下,以下的代码为什么不显示地址,而是字符串.

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;
← 上一篇: 下一篇: →