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

为什么我们有指针而不是void

如何解决《为什么我们有指针而不是void》经验,为你挑选了3个好方法。

我知道,我们有不同的指针一样int,floatchar.一个void指针是可以容纳所有其他的唯一指针.

其他指针是否存在只是为了灵活地进行指针运算?

除了voidC语言之外的其他指针还有其他原因吗?



1> Max Shawabke..:

类型安全.定义指针类型有助于编译器在尝试通过指针使用错误类型的数据时发现错误.这就是C首先出现类型的原因.


-1,非常误导:类型的存在并不意味着存在类型安全.主要是事实上,指针引用/解除引用的类型转换完全不受约束,C是一种类型不安全的语言.相反,关键是类型描述了指针引用/解除引用的语义.

2> phkahler..:

编译器需要知道指向的类型,否则各种代码将无法工作.考虑以下:

*a = *b + *c;    // Should this add char? int? float?
s_ptr->x = 0;    // How does the compiler know anything about the structure s_ptr points to?
a[5] = 0;        // How far is a[5] from a[0]?

没有指针类型就像没有任何类型的东西.编译器将完全丢失.简而言之,C和C++都是强类型的,并且由于相当明显的原因而延续了指针.


我正在使用较弱的定义,如您在链接的维基百科页面上进一步解释的那样:-)我的不好.

3> Anonym..:
int o = 12;
void *i = &o;

i如果只有void指针而没有int*,你将如何访问指向int的int.您可能知道在您的平台上,int是4个字节,因此您可以从void*指向的任何内容开始记忆4个字节到临时int,然后使用它.但那不是很方便.

或给出一个

struct Pair {
   char *first;
   char *second;
};

对结构对的void指针有多大用处?您可能想要访问其first成员,如果您没有指向结构对的指针,那么这将是很多工作.

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