我昨天在此处发布了有关指向指针的指针等的指针,并决定将讨论移至新问题答案的评论中。
我的问题是为什么编译器允许这种情况发生:
int *foo = malloc(sizeof(int));
*foo = 8;
int **********blarg = foo;
我收到了一些警告,但是当我像这样对 blarg 进行取消引用时:
*blarg;
它的值是 8。取消引用不应该返回某种类型的空值吗?难道编译器不应该知道只有在取消引用之后,例如:
**********blarg;
是否有实际的整数值,任何较低级别的取消引用只会返回更多指向指针的指针?
空指针对我来说是一个全新的困惑,因为像这样的变量:
void *asdf;
可以指向以下任何类型:
int
char
float
*void
**********void
*******int
你明白了。
所以我的主要问题:
- 第一段代码中到底发生了什么?那些指向指针的指针甚至被创建了吗?
- 为什么取消引用在第二段代码中起作用?
- (而且听起来很愚蠢)如果我可以为任何东西分配任何值并且只要我正确阅读它就可以工作,为什么还要有类型呢?