【问题标题】:How do pointers to C-Strings work compare to pointers to arrays of different data types?与指向不同数据类型数组的指针相比,指向 C 字符串的指针如何工作?
【发布时间】: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&lt;&lt;(std::isteam&amp;, char*)(和其他字符指针类型)有一个特殊的重载。如果你写std::cout &lt;&lt; "Hello world";,它会打印Hello world而不是第一个'H'的地址。参见例如this question
  • 请注意,指针真的很笨。他们知道一个物体的位置,仅此而已。他们不知道对象有多大,sizeof(p1)是指针的大小,而不是指向的对象。

标签: c++


【解决方案1】:
  • p1 是一个指向 int 的指针。 *p1 因此是一个 int -> size = 4
  • p2 是一个指向 char 的指针,因此 *p2 是一个 char -> size = 1

将 char 指针传递给输出运算符(cout<< 或 printf 等)将继续读取字符,直到它到达字符串末尾的空字符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多