typedef int array [x][];
这意味着什么。如果我们有这样的typedef会发生什么。这是我的面试问题。
答案 0 :(得分:8)
让我们假设你有一个地方:
#define x 3
正如其他人指出的那样,typedef int array [3][];
将无法编译。您只能省略数组长度的最重要(即第一个)元素。
但你可以说:
typedef int array [][3];
这意味着array
是长度为3的数组的int数组(尚未指定的长度)。
要使用它,您需要指定长度。您可以使用如下的初始化程序来执行此操作:
array A = {{1,2,3,},{4,5,6}}; // A now has the dimensions [2][3]
但你可以说:
array A;
在这种情况下,A
的第一个维度未指定,因此编译器不知道要为其分配多少空间。
请注意,在函数定义中使用此array
类型也很好 - 因为函数定义中的数组总是被编译器转换为指向其第一个元素的指针:
// these are all the same
void foo(array A);
void foo(int A[][3]);
void foo(int (*A)[3]); // this is the one the compiler will see
请注意,在这种情况下:
void foo(int A[10][3]);
编译器仍然看到
void foo(int (*A)[3]);
因此,10
的{{1}}部分会被忽略。
总结:
A[10][3]
答案 1 :(得分:3)
您将收到编译错误。对于多维数组,最多可省略第一维。例如,int array[][x]
将是有效的。
答案 2 :(得分:1)
你会得到一个诊断。
int [x][]
是一个无法完成的不完整数组类型。