user-0 提问: 继续请教指针基本问题。

回复:
user: user-1
content: 引用 8 楼 qq_16774199 的回复:引用操作系统，编译器 以及使用API，调用驱动，写驱动 凡是涉及底层的往往需要指针 不用指针，绕的弯子太大，还不好用  凡是，涉及底层，不需要指针的语言，都是对指针做了某种封装的 没有这些封装就只好用汇编实现了，  要么提供指针或引用，要么用汇编，甚至直接写二进制代码，不然的话，封装一下 。。。。引用其实是指针的某种封装  谢谢回复。 我在想不能直接操作指针的语言，为什么不提供指针？真的是好心怕程序员弄错？ 没有指针功能卖100元，现在有指针功能得卖200，因为指针很强大嘛。但也许增加指针功能只花了20成本。 你似乎只是看到了硬件成本， 而没有考虑人力的开发成本。调试的成本会成倍提高，而且对程序员的要求也高，这都是成本。最后折算下来，使用指针的成本会很高。只有在非常计较硬件成本的地方，才会不计较人力成本。

user: user-2
content: 因为以前（几十年前）计算机只有专业人员使用，搞编程的都很专业，所以C语言、C++之类都是全功能的，包含指针功能。 后来，电脑人人都有，很多非科班的或者只是爱好者也想编程，所以有的编程语言就比较“傻瓜相机”型，比如VB，没有指针，好比就不能（不需要）手动对焦、调光圈、快门等，普通的事情也能做。

user: user-0
content: 引用操作系统，编译器 以及使用API，调用驱动，写驱动 凡是涉及底层的往往需要指针 不用指针，绕的弯子太大，还不好用  凡是，涉及底层，不需要指针的语言，都是对指针做了某种封装的 没有这些封装就只好用汇编实现了，  要么提供指针或引用，要么用汇编，甚至直接写二进制代码，不然的话，封装一下 。。。。引用其实是指针的某种封装  谢谢回复。 我在想不能直接操作指针的语言，为什么不提供指针？真的是好心怕程序员弄错？ 没有指针功能卖100元，现在有指针功能得卖200，因为指针很强大嘛。但也许增加指针功能只花了20成本。

user: user-3
content: 因为指令集里面有一种间接寻址的方式，抽象出来就是指针了

user: user-4
content: 引用 4 楼 qq_16774199 的回复:[quote=引用 3 楼 jiqiang01234 的回复:] 因为指针太灵活，可以指向任何地址，这就要求程序员对内存的控制十分精准才行，无形中增大了程序出错的概率。而指针出错调试起来会更加麻烦，因为不见得崩溃的地方就是真正出错的地方，很可能是很多代码之前的指针的操作错误导致的。所以，以后的高级语言把“操作指针”这种对程序员要求太高的功能由编译器或虚拟机来完成了。 指针只是提供便利对吧，没有，程序员也能完成工作？ 有没有情况是非指针不可？[/quote] 操作系统，编译器 以及使用API，调用驱动，写驱动 凡是涉及底层的往往需要指针 不用指针，绕的弯子太大，还不好用  凡是，涉及底层，不需要指针的语言，都是对指针做了某种封装的 没有这些封装就只好用汇编实现了，  要么提供指针或引用，要么用汇编，甚至直接写二进制代码，不然的话，封装一下 。。。。引用其实是指针的某种封装

user: user-0
content: 为什么怕程序员搞错就不给指针功能呢？用销售的话来说，产品多一个功能就多一个卖点。 程序员用不好指针又不是高级语言的错。

user: user-0
content: 引用 3 楼 jiqiang01234 的回复:因为指针太灵活，可以指向任何地址，这就要求程序员对内存的控制十分精准才行，无形中增大了程序出错的概率。而指针出错调试起来会更加麻烦，因为不见得崩溃的地方就是真正出错的地方，很可能是很多代码之前的指针的操作错误导致的。所以，以后的高级语言把“操作指针”这种对程序员要求太高的功能由编译器或虚拟机来完成了。 指针只是提供便利对吧，没有，程序员也能完成工作？ 有没有情况是非指针不可？

user: user-1
content: 因为指针太灵活，可以指向任何地址，这就要求程序员对内存的控制十分精准才行，无形中增大了程序出错的概率。而指针出错调试起来会更加麻烦，因为不见得崩溃的地方就是真正出错的地方，很可能是很多代码之前的指针的操作错误导致的。所以，以后的高级语言把“操作指针”这种对程序员要求太高的功能由编译器或虚拟机来完成了。

user: user-0
content: 引用 1 楼 jiqiang01234 的回复:c语言的指针，是对汇编指令的自然延伸，汇编中无所谓变量，变量无非是内存地址中的一些数据而已。只要是找对内存地址，对地址中的数据操作，就可以认为是对变量进行了操作。所以，不是c语言发明了指针，而是指针将汇编语言直接操作内存地址的概念稍微抽象了一下。 指针不仅仅能是操作简单变量，在c语言中，几乎任何东西都可以用指针来操作。结构体指针，函数指针，数组指针....  谢谢。 那为什么在许多高级语言里没有或不推荐直接操作地址？比如VB6这种。

user: user-1
content: c语言的指针，是对汇编指令的自然延伸，汇编中无所谓变量，变量无非是内存地址中的一些数据而已。只要是找对内存地址，对地址中的数据操作，就可以认为是对变量进行了操作。所以，不是c语言发明了指针，而是指针将汇编语言直接操作内存地址的概念稍微抽象了一下。 指针不仅仅能是操作简单变量，在c语言中，几乎任何东西都可以用指针来操作。结构体指针，函数指针，数组指针....

user: user-5
content: 除此指针可以很方便的建立链表，另外你动态申请的内存也是返回指向那片内存的指针  指针总的来说可以使你写程序更灵活，但也有特别仔细

user: user-6
content: 引用顺便说下，VB6也能指针操作，需要SafeArray绕弯。码农创造力是无穷的。

user: user-7
content: 代码引用自： en.wikipedia.org/wiki/Opaque_pointer  看看这个例子，在C工程中用指针来封装变化。struct obj可以任意修改。 C中没指针，基本没法进行设计了，比方FILE*，隐藏了不必关心的细节。  不提供指针操作的语言，一般提供了其他封装手段。 顺便说下，VB6也能指针操作，需要SafeArray绕弯。码农创造力是无穷的。  /* obj.h */  struct obj;  /*  * The compiler considers struct obj an incomplete type. Incomplete types  * can be used in declarations.  */  size_t obj_size(void);  void obj_setid(struct obj *, int);  int obj_getid(struct obj *);  /* obj.c */  #include "obj.h"  struct obj {     int id; };  /*  * The caller will handle allocation.  * Provide the required information only  */  size_t obj_size(void) {     return sizeof(struct obj); }  void obj_setid(struct obj *o, int i) {     o->id = i; }  int obj_getid(struct obj *o) {     return o->id; }