当前位置:  开发笔记 > 编程语言 > 正文

对C中的指针和泛型(void)指针感到困惑

如何解决《对C中的指针和泛型(void)指针感到困惑》经验,为你挑选了1个好方法。

我错过了几个课程,并没有真正理解流动的演讲幻灯片关于void指针的例子.

    在"no,no,no"这一行中,为什么我们不能因为P被分配了一个真正的指针类型q而不需要P?

    在"??"行中,将指针强制转换为整数是否合法?(我认为它可以编译,因为C不会检查强制转换,但不知道它将获得什么样的结果

在这个例子中 ,整数指针转换为
他铸造的整数*p = 10; a =(int)p; 并且有人回答说a将是一个非常大的价值.但在我的情况下,是(int)*p ...是否与我上面给出的例子相同?

    在最后一行,我对表达式感到困惑.*((int*)p)实际上是= p吗?谢谢!

在此输入图像描述

在此输入图像描述



1> gnasher729..:

"void*"的意思是"这个值是指向某个东西的指针,但我并没有告诉你它指向的是什么".从这个陈述开始,一切都有意义.

所以应该清楚的是,你不能取消引用空白*,因为没有人告诉你它指向的是什么!如果你不知道它是指向int,char还是某个struct,你认为如果你取消引用它会怎么样?

在C中,您可以为任何指针指定void*,例如指定给int*.编译器不知道 void*指向的是什么,但是当你写r = p时; 编译器说"我希望你知道你在做什么,我相信你."(同样情况下的C++编译器不信任你).如果void*p确实指向了int,那么一切都很好.否则,事情或多或少都会变坏.

?? ?? 一个是错的.你不能解除引用*p.不管你事后做什么,*p是不允许的.并且没有指针被转换为整数.尝试取消引用指针,这是不允许的.取消引用的结果可能没有任何用处,因为你不知道p指向什么,所以你没有什么用于强制转换为int.

现在在*(int*)中发生的事情p:p是一个void* - 指向某个东西的指针,但你不知道它指向的是什么.(int*)p是强制转换:p转换为int*.这意味着编译器会相信(int*)p指向一个int - 可能是也可能不是.*(int*)p取消引用int*:总的来说,你说服编译器p指向一个int,并读取p希望指向的int.如果p确实指向了int,那很好.如果p没有指向int,那你就麻烦了.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有