指针数组和大小混乱

a13*_*37q 12 c++ pointers

为什么以下代码输出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)

  • 是的,或者使用`std :: vector <>`.它有一个`size`方法. (3认同)

Did*_*set 5

sizeof 总是返回一些字节.

这里pointer是一个......错误...指针,在32位架构上是32位,即4个字节.