C指针的真正奥妙是什么?

来源:百度知道 编辑:UC知道 时间:2024/06/10 05:59:35
C的指针我会用,但是还想不明白用和不用有什么真正的差别.比如说,我能用数组完全代替(我是从结果的角度来说)指针.
菜鸟的问题,很弱弱.谢谢
谢谢各位大虾,真的领会了不少内容.刚才在看书的时候找到这么一段话"如果参数传递采用值传递方式,需要较大的存储空间(堆栈)来操作压栈和出栈.如果采用地址传递方式,只需要一个地址值,节省存储空间.加快程序的执行速度."嘻嘻.让我再想想..

首先数组在内存中是连续存放的,这样就占了内存中整个的一部分,内存中的每一个块被各个进程占用,而系统长时间运行后各个进程块之间难免产生缝隙(windows内存整理功能主要就是把这些分散的空间整合),比如5个分散的5k的空间,如果你使用数组申请一个25k的空间,则这分散的5个5k空间无法使用,系统要在内存中另外开辟一个25k的连续空间,而使用指针则可以利用分散的空间。这样就提高了资源的利用率。其次数组在声明的时候就要确定长度,这样在具体应用的时候往往事先并不知道长度,无论是申请长了造成空间浪费还是申请短了不够用,都在编程上带来不便,而指针可以动态的分配内存。当然c的编译器不能动态的回收内存,如果你编写的是一个服务器级别的程序要长时间运行的话些许的内存泄漏(指针空间的未回收)都会造成系统崩溃,所以使用指针的时候要记得释放内存。当然指针还有很多优点,还是要靠你自己慢慢摸索的。

在效率一样的情况下,能不用指针,就别用它吧

指针,通常用来管理动态内存的,需要程序员申请和释放,而数组是静态的,不用程序员释放

指针,可以用来建立链表等复杂的数据结构,便于快速访问数据,这种情况下,不用指针的话,比较难实现。

PS:
参数传递,也是指针的一种灵活的用法,在更高级点的C语言语法里面,或在C++里,有个“引用”,跟指针有异曲同工之妙。

数组名对应着一块内存,它的地址、容量是不可变的,只有数组内容是可变的。指针可随时指向任何类型的内存,它的特点就是“变”。指针远比数组灵活。
另外,函数指针你能用数组代替吗

指针可以直接操作内存,
使得有很高的效率
我就这么理解的,不过具体用的时候很费劲啊

上面有些人其实讲的不错,不过别人讲的再好你也不会理解的,建议你去看下链表,搞懂了你会真得理解为什么要指针了~不会的链表的人其实根本就没学指针。
ps:仔细分辨下内存和变量名对应关系的不同~