为什么以下代码输出4?
char** pointer = new char*[1];
std::cout << sizeof(pointer) << "\n";
Run Code Online (Sandbox Code Playgroud)
我有一个指针数组,但它应该有长度1,不应该吗?
Jam*_*ran 19
pointer是一个指针.它是指针的大小,在系统上是4个字节.
*pointer也是一个指针.sizeof(*pointer)也将是4.
**pointer是一个炭.sizeof(**pointer)将注意,**指针是一个char,因为它被定义为char**.新的阵列的大小进入了这个.
注意,这sizeof是一个编译器操作符.它在编译时呈现为常量.任何可以在运行时更改的东西(比如新的数组的大小)都无法确定sizeof.
注2:如果您将其定义为:
char* array[1];
char** pointer = array;
Run Code Online (Sandbox Code Playgroud)
现在pointer与以前具有相同的价值,但现在你可以说:
int arraySize = sizeof(array); // size of total space of array
int arrayLen = sizeof(array)/sizeof(array[0]); // number of element == 1 here.
Run Code Online (Sandbox Code Playgroud)