假设以下C变量声明:
int *A[10], B[10][10];
以下表达式:
A[2]
A[2][3]
B[1]
B[2][3]
如果在C程序中用作赋值语句的左侧,则不会产生编译时错误。
A)仅限1,2和4
B)仅限2,3和4
C)仅限2和4
D)仅限4
我在gcc编译器上试过这个。我为所有上述变量赋值“0”。只有第三个显示错误。我无法理解原因。有人可以解释原因吗?
答案 0 :(得分:6)
A[2]
,因为A
是一个指针数组,您可以为指针指定0(它是一个NULL指针)。A[2][3]
,因为在此级别您正在使用int
。B[1]
,因为B
是数组数组,0是标量。答案 1 :(得分:0)
将声明分解为:
int *A[10];
int B[10][10];
您可以看到A[10]
实际上是指针的数组,而B[10][10]
是整数数组的数组。您无法将整数分配给B[1]
的原因是因为B[1]
应该是int[]
类型(数组),并且您不能使用{{1}覆盖它}值。
分配给int
是有效的,因为您只是将该数组元素指向其他值,在本例中为A[2]
。
答案 2 :(得分:0)