gpt4 book ai didi

c++ - 输出运算符如何知道字符数组的大小?

转载 作者:行者123 更新时间:2023-12-01 14:37:06 24 4
gpt4 key购买 nike

《C++ Primer》一书指出了以下内容:

Because arrays are passed as pointers, functions ordinarily don't know the size of the array they are given. They must rely on additional information provided by the caller.

所描述的选项包括使用结束标记字符、使用指向数组最后一个元素的位置的指针或使用参数来表示数组的大小。

但是,当我创建 const char 的非空终止数组时并将其传递给名为 print 的函数,<<运算符(operator)完全知道何时停止读取,而无需任何这些技术。它是怎么知道的?

#include <iostream>

void print(const char line[]) {
std::cout << line << '\n';
return;
}

int main() {
const char str[] {'f', 'o', 'o', ' ', 'b', 'a', 'r'};
print(str);
return 0;
}

最佳答案

您只是在内存布局方面很幸运,并且意外遇到了空终止符。

在 VS2019 上我得到的输出是:

foo bar╠╠╠╠╠CÌ╦À<³3☺33Ò

尝试弹出:

std::cout << sizeof(line) << '\n';

std::cout << sizeof(str) << '\n';

您将看到指针大小和数组大小之间的差异。

进一步说明:

sizeof 应用于其定义对编译器可见的数组时,它返回分配给该数组的字节数。

sizeof应用于任何其他数组时,编译器无法确定数组的大小,因此只能给出指向数组的指针的大小。

参见:How to find the 'sizeof' (a pointer pointing to an array)?

关于c++ - 输出运算符如何知道字符数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63434478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com