指针类型
指针类型是C语言中一个非常特殊的类型,正是因为有了指针,C语言才显得威力无穷,可以说指针是C语言的灵魂。虽然其他语言,如Pascal,也实现了指针,但它的指针有诸多限制,如不允许指针执行算术和比较操作等,不允许创建指向已经存在的数据对象的指针等,因此Pascal语言中的指针远远不如C语言中的指针灵活高效。
在C语言中,指针是没有任何限制的,其作用非常强大,C语言指针的强大作用主要体现在以下几个方面。
(1)可编写底层代码。指针用于操作内存,而内存由硬件提供,指针相当于可直接操作硬件,因此拥有指针的C语言也被称为高级汇编语言,使用C语言可以编写驱动程序、操作系统等底层代码,这是其他高级语言无法实现的。
(2)使数据结构更灵活。指针在数据组织方面具有很大的作用,例如链表,虽然链表使用数组也可以实现,但数组实现的链表比较“笨拙”,在执行操作时内存开销比较大,而使用指针实现的链表更灵活,指针可以映射上下链接,在执行操作时内存开销大大降低。
(3)支持动态内存分配。C语言支持动态分配及释放内存,实现了内存随时使用随时分配,不使用时随时释放,这样可使代码更紧凑,既提高了代码可读性,又提高了内存的管理效率。
(4)降低内存开销。有时在程序中需要传递庞大的数据结构,这会造成非常大的内存开销,如果使用指针传递数据,则可避免过多的内存开销。
C语言中的指针功能强大,它没有任何限制,使得C程序员都热衷于使用指针。但正是由于C语言指针没有限制而又“臭名昭著”,处处布满陷阱,例如访问数组时越界、内存泄露、野指针等,并且指针错误往往难以发觉与调试,即便是资深C程序员也是深受其害。
学习指针时理解C程序中的内存管理十分重要,指针就是计算机内存的地址,通过指针可以操作该地址对应的内存中存放的数据。指针将在第5章进行详细讲解,在这里读者只需要了解指针的重要性即可。