【发布时间】:2022-11-29 06:38:03
【问题描述】:
我是 CompSci 入门课程的学生,我对 C++ 中的指针有非常基本的了解。我在尝试完成作业时注意到,字符数组/c 字符串使用指针的方式与其他数据类型不同。
例如,请考虑我创建的以下代码:
`
int main()
{
int inta[] = {1,2,3};
int* p1 = inta;
cout << "p1 = " << p1 << endl;
cout << "*p1 = " << *p1 << endl;
cout << "sizeof(p1) = " << sizeof(p1) <<
", sizeof(*p1) = " << sizeof(*p1) << endl;
char stra[] = "Dog";
char* p2 = stra;
cout << "p2 = " << p2 << endl;
cout << "*p2 = " << *p2 << endl;
cout << "sizeof(p2) = " << sizeof(p2) <<
", sizeof(*p2) = " << sizeof(*p2) << endl;
return 0;
}
`
*p1 和 *p2 的输出都是数组的第一个值。然而,虽然 p1 的输出是指向 inta 的第一个元素的指针(来自在线研究),但 p2 的输出是整个单词“Dog”。 p1和p2的大小相同,*p1和*p2的大小分别为4和1。有什么我想念的吗?
我正在使用 Visual Studio Community 2022 并创建了一个普通项目。
谢谢你,感谢你的帮助!
【问题讨论】:
-
特别是
operator<<(std::isteam&, char*)(和其他字符指针类型)有一个特殊的重载。如果你写std::cout << "Hello world";,它会打印Hello world而不是第一个'H'的地址。参见例如this question -
请注意,指针真的很笨。他们知道一个物体的位置,仅此而已。他们不知道对象有多大,
sizeof(p1)是指针的大小,而不是指向的对象。
标签: c++