gpt4 book ai didi

c++ - C++中字符数组的内存分配

转载 作者:行者123 更新时间:2023-11-28 00:43:29 25 4
gpt4 key购买 nike

#include<iostream>
using namespace std;
int main()
{
cout<<"Enter\n";
char ch[0];
cin>>ch;
cout<<sizeof ch;
cout<<sizeof &ch;
cout<<"\n You entered \n"<<ch<<"\n";
return 0;
}

我使用 g++ 编译器来编译 C++ 程序。 char chchar ch[0] 的内存分配有什么不同。 ch可以接受一个字符,但是ch[0]可以接受多个字符(我输入了qqqqqqqq)。为什么?另外,为什么 sizeof ch 返回 0 而 sizeof &ch 返回 4,而 ch 接受超过四个字符?

最佳答案

让我们逐行分析:

char ch[0];

声明一个零长度的字符数组。如评论中所述,C++ 标准实际上不允许这样做,但 g++ 可能允许。

cin >> ch;

将读取的内容放入零长度数组。由于 cin 不知道数组的长度(当它传递给流时它会衰减为 char * ),它会尽可能多地写入,这意味着它可以存储多于零个字符。

cout << sizeof ch;

输出数组的大小(即以字节为单位使用的总空间),如前所述,它为零。

cout << sizeof &ch;

输出数组地址的大小,在您的体系结构中为 4 个字节,因为它只是一个指针。

cout << "You entered\n" << ch << "\n";

输出存储到数组中的任何内容,该数组定义不明确,因为正如我提到的,零长度数组不是标准 C++。此外,由于 cout 只是写入内存,直到它遇到一个空字节 (\0),它会写入与存储一样多的内容,因为 cout > 不关心你是用大小 0 还是大小 413 delcared ch

关于c++ - C++中字符数组的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17554413/

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