代码先上
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;
修改后运行的结果

本文通过一个具体的代码示例,详细解析了字符数组及其指针的输出问题,包括为何输出时出现乱码现象、如何正确显示字符数组的首地址等问题,并提供了有效的解决方案。

3702

被折叠的 条评论
为什么被折叠?



