gpt4 book ai didi

c - 当指针未指向正确的类型时,为什么 gcc 允许取消引用。为什么还要有类型?

转载 作者:行者123 更新时间:2023-12-02 07:36:26 25 4
gpt4 key购买 nike

<分区>

我昨天发布了关于指向指针等的指针的指针。here并决定将讨论移到新问题的答案评论中。

我的问题是为什么编译器允许这种情况发生:

int *foo = malloc(sizeof(int));
*foo = 8;
int **********blarg = foo;

我收到了一些警告,但是当我像这样对 blarg 进行取消引用时:

*blarg;

它的值为 8。解引用不应该返回某种类型的空值吗?编译器不应该只在取消引用之后才知道,例如:

**********blarg;

是否有一个实际的整数值,任何较低级别的取消引用只会返回更多指向指针的指针?

空指针对我来说是一个全新的困惑,因为像这样的变量:

void *asdf;

可以指向这些类型中的任何一个:

int
char
float
*void
**********void
*******int

你明白了。

所以我的主要问题是:

  1. 第一段代码中到底发生了什么?是否创建了指向指针的指针?
  2. 为什么解引用在第二段代码中有效?
  3. (听起来很愚蠢)如果我可以为任何东西赋值并且拥有类型,为什么还要有类型只要我正确阅读它就可以工作吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com