C++中字符数组的内存分配
Memory allocation of character array in C++
#include<iostream>
using namespace std;
int main()
{
cout<<"Entern";
char ch[0];
cin>>ch;
cout<<sizeof ch;
cout<<sizeof &ch;
cout<<"n You entered n"<<ch<<"n";
return 0;
}
我使用 g++ 编译器来编译C++程序。char ch
和char ch[0]
的内存分配有什么区别。 ch
可以接受一个字符,但ch[0]
可以接受许多字符(我放入了 qqqqq(。为什么?另外,为什么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 enteredn" << ch << "n";
输出存储到数组中的任何内容,数组没有明确定义,因为正如我提到的,零长度数组不是标准C++。此外,由于cout
只是写入内存,直到遇到空字节(