无意中写出来的代码,发现能编译,很是不解:
int main()
{
int (*p)[];
return 0;
}
如果类似于 int(*)[2]
我还是明白的,但是这种就不太了解了。
这个 int(*)[]
是什么类型,为什么编译器不会报错。
还有,如果能声明这种类型,那么它能被赋予什么值呢?
无意中写出来的代码,发现能编译,很是不解:
int main()
{
int (*p)[];
return 0;
}
如果类似于 int(*)[2]
我还是明白的,但是这种就不太了解了。
这个 int(*)[]
是什么类型,为什么编译器不会报错。
还有,如果能声明这种类型,那么它能被赋予什么值呢?
15 回答8.4k 阅读
3 回答2k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
int[]
是未知长度的数组(array of unkown bound)。这个是一个不完整类型(incomplete type)。int (*p)[]
是指向未知长度的数组的指针。由于
int[]
是一个不完整类型,int(*)[]
不能通过对一个对象取地址(&
)得到。实际对象的类型一定是完整的。void
也是一个不完整类型,void*
也不能通过一个对象取地址得到,而必须通过类型转换得到。不过,
void*
有一些实际的用处,但是,int(*)[]
虽然合法,却想不到有什么实际用处。