链表的由来和指针的思考

今天看 C 语言的指针,原来在 C 中,动态增长的数组是很麻烦的。而链表的实现则相对简单。 在动态申请内存时,一次申请一大块空间经常会不成功,于是一次申请一点,用链表的形式 将现有的关联资源链接起来,这样就出现了一种常用的数据类型,链表。

在动态语言中,数据的动态增长是交给语言本身的,所以很少接触到这个东西。

除了定长的数据类型之外,在编译型语言中,动态增长的数据结构,使用指针(引用)作为 其内容,编译器比较容易优化。

int *p = []int (1,2,3)  => p = &[]int (1,2,3)

*p 在声明的时候,用在赋值表达式的左边,有匹配的效果。用在右边有解引用的效果。

[]int x = *p

而取地址操作符,只能用在右边,是一个函数,可以获取变量的值的地址。

指针计算被大多数系统语言抛弃,本身也可以用其他写法代替。指针最无可替代的用处就是 传递引用,有些语言会显式的解引用,例如 C C++ Go, 而有些语言会自动解引用,例如 PHP.

传递引用是语言必须有的特性,而解引用则可以自动进行,毕竟指针不能计算,而指针的指针也不能 计算,但可以比较,如果把一个指针的指针自动的解引用,那么就无法正确的比较。比较稳妥的办法 还是显式的解引用。

转载于:https://my.oschina.net/u/563463/blog/741941

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值