其实呀,对于 char *p="afjfkjkladfsjije"; 这句话中的指针着实很奇怪。
当你 cout<<*p<<endl; 的时候,它输出的是那个字符串的首个字符——'a'。
当你 cout<<p<<endl; 的时候,它输出的是整个字符串的内容——""afjfkjkladfsjije""。
感觉到奇怪了吧,为什么这句话是输出整个字符串的内容,而不是地址呢。那么,我告诉你:没有为什么!
然而,经过高人指点了一下,发现是有原因的,什么原因呢?我也不太清楚,等明白了再告诉大家吧!下面补充上输出字符串指针地址的代码。
下面我就给出一段代码来验证我的说法。
#include "iostream"
#include "cstdio"
using namespace std;
int main()
{
char *p = "abckdfej";
for(int i=0; i<strlen(p); i++)
cout<<p[i]<<" "; ///其实这种输出的方式不必大惊小怪的,也就是将指针转化成了数组嘛!
cout<<endl;
cout<<endl;
while(*p) ///这种遍历的方式倒值得注意一下。
{
cout<<*p<<" ";
cout<<p<<" "; ///看到没,这里输出的是字符串的内容,不过会逐个减少,因为p++的缘故
///我将在下面一行补充上字符串指针的代码(只要将char* 转换成 void*就行了)
void *pp = p;
cout<<pp<<endl; ///看到没,这里输出的就是字符指针的地址了。
p++;
}
cout<<endl;
cout<<endl;
int a[10]={1,2,3,4,5,6,7,8,9,0};
int *intp = a;
for(int j=0; j<10; j++)
cout<<intp[j]<<" ";
cout<<endl;
while(*intp)
{
cout<<*intp<<" ";
cout<<intp<<endl; ///看到没,这里输出的是地址。之所以来一个整形的数组,就是为了和字符串做一下对比。
intp++;
}
cout<<endl;
}