《c和指针》笔记4

指针算数运算

  指针可以执行某些运算,但不是所有的运算都是合法的.指针加上一个整数后的结果还是指针.

  如果指针加上1,对于所有的类型是否都是指向下一个字符呢?答案是否定的,这会根据指针指向的类型所决定,如:指向char类型的指针,则结果指向下一个字符;指向int类型的指针,则结果则是使指针加4(假设int类型占4个字符).
  指针的算术运算只限于+/-,数组中的元素是连续存储的,因此对该指针进行加法元运算,则会使指针移动到相应的数组元素位置.

  如果指针的位置在第一个元素之前或者最后一个元素之后,则是未定义,对该指针执行间接地址操作可能会失败.

  指针的减法运算的结果是一种有符号的整数类型,值为两个指针在内存中的距离(所指向类型的元素为单位),该运算的前提是两个指针都是指向相同类型,否则结果将为未定义.(适用于数组中)

  减法元素在上一篇实现rotate函数的文章中有使用过(可以计算出两个指针之间的内存距离).

  警告:绝大多数的编译器并不会检查指针表达式的结果是否位于合法的边界之内,因此程序员在编码过程当中要注意,确信结果是指向有意义的东西.

指针关系运算

  该运算的前提是两个指针必须指向统一数组中的元素,结果将会告诉你哪个元素更靠前或靠后.

  警告:标准允许指向数组元素的指针与数组最后一个元素后面的那个内存位置的指针进行比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较.

函数

  当程序调用一个无法见到原型的函数时,编译器会默认该函数返回一个整型.对于那些并不返回整型值的函数,这种设定可能会引起错误.

  C函数的绝大部分参数均以"传值调用"方式进行传递(函数将获取参数值的一份拷贝,).

  但是如果传递的是数组名,那么函数中使用下标对数组进行修改,则会修改该数组中的元素(传址调用).

  因此我们实现swap交换2个变量的值时,传入的是指向该变量类型的指针,而不是变量本身.

 

  今天就学习到这里,明天继续,加油!

posted @ 2012-06-18 07:05  ahl5esoft  阅读(209)  评论(0编辑  收藏  举报