最近在学数组的时候,碰到了字符串指针,很是疑惑,为了加深记忆,记下来吧。
#include <iostream>
usingnamespacestd;
int main() {
char*pc="SNAIL";
cout<<pc<<endl;
cout<<*pc<<endl;
cout<<(unsigned*)pc<<endl;
pc = pc+3;
cout<<pc<<endl;
cout<<*pc<<endl;
cout<<(unsigned*)pc<<endl;
}
pc输出的是整个字符串,*pc输出的是字符串的首字母,而(unsigned *)pc输出的是字符串的首字母的地址。
在c中,字符串常量是按照字符数组处理的,其实际上是在内存中开辟了一个字符数组来存放字符串数组,在上述程序中定义了一个字符指针pc,并把字符串的首地址赋值给了它,可以看到:pc被定义为一个指针变量,它指向字符型数据,请注意只能指向一个字符变量或其它字符类型数据,不能同时指向多个字符数据,更不是把"SNAIL"这些字符存放到pc中。只是把"SNAIL"的首地址赋给指针变量pc(不是把字符串赋给*pc)。
在c++中,字符指针对于<<来说,全作为字符串的首地址来处理,系统先输出它所指向的一个字符数据,然后自动使pc加1,使之指向下一个字符,然后再输出一个字符,……,如此直到遇到字符串结束标志‘\0’为止。