运算分为很多种:加减法,乘除法,等等;但是指针进行任意的运算都是合法的吗?
答案我想大家都知道了:并非所有的运算在指针上都是合法的。加(减)法当然是大家最熟悉的了。一个指针加上一个整数(指针+整数),不多说了。大家都应该清楚。如果是指针减去指针(指针-指针)呢?答案是在某种情况下可以,怎么这样说呢?请看下面:
只有两个指针都是指向同一个数组中的元素时,才能允许指针减去指针。两个指针相减的结果的类型是ptrdiff_t,它是一种有符号整形类型。减法运算的值是两个指针在内存的距离(以字节为单位),减法运算的结果除以数组元素类型的长度。这种差值的调整使得指针的运算结果与数据的类型无关。
如果两个指针所指向的不是同一个数组中的元素时,那么他们之间的结果肯定是未定义的。(千万要小心!!!!!)
举个例子吧::::
for(i=&values[5];i>=&values[0];i--)//将数组元素全清为0
*i=0;
这个是代码是有问题的,但是大部分编译器是可以运行的。但是这不是好的写法,因为它不是c语言的标准规定的。具体是什么问题给大家一个悬念吧。哈哈!!!!!如果有谁看出来,给我留言