以下声明的大小是多少?

0 c memory

我和我的朋友正在争论这个.

char **array[2][2]; 
Run Code Online (Sandbox Code Playgroud)

它占用内存的大小8 + 2*2*8- 指针数组指针为8,指针数组为32指针?或者它只是8因为我们正在声明一个指针数组的指针.这个声明不必为指针数组分配空间,只需指针指针?

Joh*_*ger 9

正如cdecl可以告诉你的那样(有点摆弄),你的声明

char ** array[2][2];
Run Code Online (Sandbox Code Playgroud)

声明array为指向两个指针的两个数组的数组char.这意味着总共有四种类型的元素char **(没有别的).C没有指定大指针的大小,甚至指向不同类型的指针也具有相同的大小,但是在64位实现中,所有指针的宽度都是8字节.在这样的实现中,声明的对象的大小是2*2*8 == 32字节.没有额外的指针.

如果你想要一个2 x 2数组的指针char *,那将是不同的:

char * (*array)[2][2];
Run Code Online (Sandbox Code Playgroud)

......而且它的大小确实是一个指针的大小.在这种情况下,对于指向的2D阵列,不保留存储.