当一个指针表达式的值为一个char*类型指针时,输出指针不是输出这个指针的值(地址),而是输出这个值所指向(即以这个值为首地址)的字符串。例如:
int a,*ap=&a;
char * cp;
cp="output";
cout<<ap<<''<<cp<<endl;
cout<<(void*)cp<<endl;
执行这几条语句后结果为:
0x0065FDF4 output
0x004260B4
将字符指针转化为一个void*类型的值,才能输出真正的地址的值。
由于指针就是内存中的地址,所以只要是地址,它指向的是某个字符串的首地址或者是字符串中间一个字符的地址,那么在输出这个地址的时候都是输出的是以这个地址为首地址到字符串结束标记所包含的子字符串例如:
char s1[]="StringPointer";
cout<<&s1[6]<<endl;//&s1[6]等同与s1+6
程序执行输出结果为:
Pointer
这里&s1[6]本应该是P这个字符对应的地址,可以把它看成一个指针,但是由于s1是字符串,所以输出来的是 子字符串,可以对&s1[6]进行一个指针的操作,如:(void*)&s1[6]输出真正的地址,*&s1[6]输出真正的地 址所对应的字符,和s1[6]等同。
int a,*ap=&a;
char * cp;
cp="output";
cout<<ap<<''<<cp<<endl;
cout<<(void*)cp<<endl;
执行这几条语句后结果为:
0x0065FDF4 output
0x004260B4
将字符指针转化为一个void*类型的值,才能输出真正的地址的值。
由于指针就是内存中的地址,所以只要是地址,它指向的是某个字符串的首地址或者是字符串中间一个字符的地址,那么在输出这个地址的时候都是输出的是以这个地址为首地址到字符串结束标记所包含的子字符串例如:
char s1[]="StringPointer";
cout<<&s1[6]<<endl;//&s1[6]等同与s1+6
程序执行输出结果为:
Pointer
这里&s1[6]本应该是P这个字符对应的地址,可以把它看成一个指针,但是由于s1是字符串,所以输出来的是 子字符串,可以对&s1[6]进行一个指针的操作,如:(void*)&s1[6]输出真正的地址,*&s1[6]输出真正的地 址所对应的字符,和s1[6]等同。