• 欢迎访问IT乐园(o゚▽゚)o
  • 推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。

《C和指针》指针

读书 fhy 6年前 (2017-12-13) 2896次浏览 0个评论

第六章指针总结

本文仅仅是为了学习《C 和指针》一书进行记录,内容来自《C 和指针》第六章总结部分。

  计算机内存中的每个位置都由一个地址标识。通常,临近的内存位置合成一组,这样就允许存储更大范围的值。指针就是它的值表示内存地址的变量。

  无论是程序员还是计算机都无法通过值的位模式来判断它的类型。类型是通过值得使用方法隐式地确定的。编译器能够保证值的声明和值的使用之间的关系是适当的,从而帮助我们确定值的类型。

  指针变量的值并非它所指向的内存位置所储存的值。我们必须使用间接访问来获得它所指向位置存储的值。对一个 “指向整形的指针” 施加间接访问操作的结果将是一个整型值。

  声明一个指针变量并不会自动分配任何内存。在对指针执行间接访问前,指针必须进行初始化;或者使它指向现有内存,或者给它分配动态内存。对未初始化的指针变量执行间接访问操作是非法的,而且这种错误常常难以检测。其结果常常是一个不相关的值被修改。这种错误是很难调试发现的。

   NULL 指针就是不指向任何东西的指针。它可以赋值给一个指针,用于表示那个指针并不指向任何值。对 NULL 指针执行间接访问的后果因编译器而异,两个常见的后果分别是返回内存位置零的值以及终止程序。

  和任何其他变量一样,指针变量也可以作为左值使用。对指针执行间接访问操作所产生的值也是个左值,因为这种表达式标识了一个特定的内存位置。

  除了 NULL 指针之外,再也没有任何内建的记法来表示指针常量,因为程序员无法预测编译器会把变量放在内存中的什么位置。在极少见的情况下,我们偶尔需要使用指针常量,这时我们可以通过把一个整型值强制转换为指针类型来创建它。

  在指针值上可以执行一些有限的算数运算。你可以把一个整型值加到一个指针上,也可以从一个指针上减去一个整型值。在这两种情况下,这个整型值会进行调整,原值将乘以指针目标类型的长度。这样,对一个指针 1 将使它指向下一个变量,至于该变量在内存中占几个字节的大小则与此无关。

  然而,指针运算只有作用于数组中其结果才是可以预测的。对任何并非指向数组元素的指针执行算术运算是非法的(但常常很难被检测到)。如果一个指针减去一个整数后,运算结果产生的指针所指向的位置在数组第一个元素之前,那么它也是非法的。加法运算稍有不同,如果结果指针指向数组最后一个元素后面的那个内存位置任是合法(但不能对这个指针执行间接访问操作),不过再往后就不合法了。

  如果两个指针都指向同一个数组中的元素,那么它们之间可以相减。指针减法的结果经过调整(除以数组元素类型的长度),表示两个指针在数组中相隔多少个元素。如果两个指针并不是指向同一个数组的元素,那么它们之间进行相减操作是错误的。

  任何指针之间都可以进行比较,测试他们相等或不想等。如果两个指针都指向同一个数组中的元素,那么它们之间还可以执行<、<=、>和>=等关系运算,用于判断它们在数组中的相对位置。对两个不相关的指针执行关系运算,其结果是未定义的。


IT 乐园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:《C 和指针》指针
喜欢 (0)
关于作者:
九零后挨踢男
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址