问一下指针和字符串的问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 18:41:22
#include<iostream>
using namespace std;
int main(){
(1) char *p="hello";
char a='w';
cout<<"P:"<<p<<endl;
cout<<"p+1:"<<p+1<<endl;
cout<<"*p:"<<*p<<endl;
(2) p=&a;
cout<<"p:"<<p<<endl;
cout<<"&a:"<<&a<<endl;
cout<<"*p:"<<*p;
cin.get();
}
想问一下字符串的内在机制是怎么表现的,看上例(1)为什么指针直接写p时就显示hello,而(2)的p就显示地址
为什么(1)不显示“hello"的地址?
请高人指教

程序中的字符串常量编译后放在全局区吧?而你用的p就是指向了该字串首地址。输出的函数对象char *之类的类型认为是字符串,用while for等,依次输出字符(你可以看到,这在整个C和C++的代码中大量存在),直到碰到\0,正好结束。由于p是指针变量,所以p就是hello的地址,而&p是p这个指针自己的地址,不在全局区,而在堆栈上。2的a是字符型,不是字串,把a建立在堆栈上,并把'c'移到那个内存单元去(与串是完全不一样的)。