我试图在栈上创建一个固定大小的字符数组(它确实需要堆栈中分配)。 我有问题是我不能得到的堆栈分配8个字节以上的数组:
#include <iostream>
using namespace std;
int main(){
char* str = new char[50];
cout << sizeof(str) << endl;
return 0;
}
版画
8
如何分配一个固定大小阵列(在此情况下50个字节。但是它可以是任意数量)在堆栈上?
char* str = new char[50];
cout << sizeof(str) << endl;
它打印的指针,这是大小8
平台上。 这是相同的,因为这些:
cout << sizeof(void*) << endl;
cout << sizeof(char*) << endl;
cout << sizeof(int*) << endl;
cout << sizeof(Xyz*) << endl; //struct Xyz{};
所有这些将打印8
平台上。
你需要的是其中之一:
//if you need fixed size char-array; size is known at compile-time.
std::array<char, 50> arr;
//if you need fixed or variable size char array; size is known at runtime.
std::vector<char> arr(N);
//if you need string
std::string s;
其实,你分配50 * sizeof(char)
,或50个字节。 sizeof(str)
是sizeof(char*)
这是一个指针的大小。
为了把堆栈上的C数组,你必须写
char myArray[50] = {0};
C ++的方式做这将是 - 正如纳瓦兹指出
std::array<char, 50> arr;
但我不知道这是否数组的内容将驻留在堆栈中。
str
这里所引用到的大小的字符数组50*sizeof(char)
。 但是sizeof(str)
正在打印sizeof
的str
变量,而不是sizeof
它是什么引用。 str
这里仅仅是一个指针变量和指针变量是一个无符号整数,其大小为8
。
还不能确定sizeof
基准(在这种情况下,字符数组的大小)。 这是因为编译器不知道什么指针指向。
编辑 :获取sizeof
什么指针指向不使C / C多大意义++的。 假设一个指针指向一个基本类型(如int
, long
),那么你可以直接做sizeof(int)
。 而如果指针指向一个数组,像在这种情况下,你可以直接做arraySize * sizeof(dataTypeOfArray)
arraySize
因为C被反正已知/ C ++不允许定义未知大小的阵列,以及dataTypeOfArray
被反正已知的。