通过移动指针变量的位置来改变数组里面的元素
#include “stdio.h "
#include"stdlib.h”
int *f(int *s)
{
s += 2;
s[1] += 6;
*s-- += 7;
return s;
}
int main()
{
int a[5] = {1,2,3,4,5},*p;
p = f(a);
printf("%d,%d,%d,%d",a[1],a[3],p,p[1]);
}
先给各位读者举一个很简单的例子,请详看指针的精彩内容
各位读者不妨先猜一下printf打印出来的值
结果是2,10,2,10
相必大家会有点奇怪为什么打印出来的是2,10,2,10呢
其实啊,上面这段代码是通过函数调用之间做地址传递的,但是跟以往的通过实参将数组传递给指针变量不同的是他是通过(指针的指向偏移)来修改数组里边的内容的
首先呢先看我们自定义的指针函数int f(int s)里面的代码
s += 2,其实是一个指针变量做右移动2个位置得到了a[2]
相当于呢s先是指向了数组里面的第3个元素也可以理解为指针变量s的首地址所以呢s是指向了a[2],紧接着s[1]所指向的又是数组里面的哪个元素呢我们不妨推断一下指针变量s的首地址为s[0]是数组当中的3元素,那如果s[1]不就是a[3]了吗
也就是4,
s[1] += 6;展开形式不就是s[1] = s[1] + 6,s[1]当中的元素为4
4+6 = 10,再赋值给s[1],s[1]是指向a[2]的 给s[1]赋值的过程不就是相当于给a[2]赋值吗这是相当于通过移动指针变量的位置从而改变数组当中的元素值