代码先上
int main()
{
int a[] = { 1,3,5,7,9 };
int *p = a;
cout << "a=" << a << endl;
cout << "*a=" << *a << endl;
cout << "asize="<<sizeof(a) << endl;
cout << "p=" << p << endl;
cout << "*p=" << *p << endl;
cout << "psize=" << sizeof(p) << endl;
cout << "------------------------" << endl;
char aa[] = { '1','3','5','7','9'};
char *pp= aa;
cout << "aa=" << aa << endl;
cout << "*aa=" << *aa << endl;
cout << "aasize=" << sizeof(aa) << endl;
cout << "pp=" << pp << endl;
cout << "*pp=" << *pp << endl;
cout << "ppsize=" << sizeof(pp) << endl;
}
运行结果:
问题
1、当直接用字符数组名输出时,输出的不是字符数组的首地址,而是字符串?
3、为什么会出现乱码的现象?
2、怎么才能输出字符数组的首地址或字符指针呢?
解决方法
1、因为对字符数组进行输出时,重载了插入运算符<<,所以默认输出是字符串,而不是地址;这与输出整型数组是一个很大的不同。
2、因为字符串是以’\0’结束的,当对字符数组进行输出时,因为没有’\0’这个结束符,所以会一直输出,直到遇到结束符为止。
3、输出时显式指出要输出的为地址,即在输出前用(int*)。
修改后的代码
char aa[] = { '1','3','5','7','9' ,'\0'};
cout << "aa=" << (int*)aa << endl;
cout << "pp=" << (int*)pp << endl;