对于指针,选择大家或多或少的都有着些许见解和认识!大部分初步了解指针了已经,要不然,还不注重指针的基础知识??也可以参考笔者前面几篇文章内容,根据书本知识来学习参考!好高骛远的看指针的运算呢??
指针的运算!
指针的(+ , -)加减整数运算
对于指针的运算应用较为广泛,但是,对于加减乘除四则运算,在指针这儿,我们却只见过指针的加减整数运算,并没有涉及指针的乘除整数运算,原因很简单:指针的本质其实还是一个地址,对地址进行乘除整数?怎么可能得出来正确的答案呢??
下面笔者在指针,*(解引用操作符)之间,详解指针的加减整数运算!
//按顺序输入各组元素 #include <stdio.h> int main() { double arr[5] = { 0 }; double* p = arr; int i = 0; for (i = 0; i < 5; i++) { arr[i] = i + 1; //在每次循环的基础上,将元素赋值为i+1 printf("%lf ", *(p + i)); } return 0; }
在本段代码中, double arr[5] = { 0 }; double* p = arr; 定义了double类型的arr[5]数组,因此指针p指向的也应该为double型,所以定义为 : double* p = arr;
对于下面简短代码,在笔者博客前文略有涉及,描写也算较为全面,但是对于一些不愿意找的读者而言,笔者还是再来进行简单描写一边吧!
for (i = 0; i < 5; i++) { arr[i] = i + 1; //在每次循环的基础上,将元素赋值为i+1 printf("%lf ", *(p + i)); }
在这个代码片段中,用for循环,实现每次循环下来 i 的值每次都增加1,然后在每次循环时候都用 i +1赋值给数组arr[];最后输出时候,用printf("%lf ", *(p + i));在这里,p+i指:每次循环数组地址都往后走i步,找到位于arr[i]上的元素位置!因为i的取值在 : i=0;i<5;i++ 范围内,因此也不担心越界问题!最后在通过 * (解引用操作符)的使用,最后通过地址找到该元素的大小数值并打印出来!
因此最后的打印结果为:
指针的比较大小
对于刚开始接触指针的大小比较时候,笔者也是一脸迷茫,但是,当慢慢学习接触下来发现还是挺有必要的!
下面笔者用一个代码片段在进行讲解一下!
#include <stdio.h> #define n_ualue 5 int main() { float valuer[n_ualue]; float* vp; //指针的加减整数,指针的关系运算 for (vp = &valuer[0]; vp < &valuer[5];) { *vp++ = 0; //printf("%f ", *vp); } return 0; }
在这里面涉及到的内容由如下解释:
对于*vp ++而言; ++的优先级高于:* 因此先进行++选项,但是对于该: *vp ++ 而言,为后置++,因此又有表达式的值仍为 vp;
在for循环中: for (vp = &valuer[0]; vp < &valuer[5];) 这个代码,不建议大家进行使用,当然笔者用该段代码仅仅是供大家参考:*vp ++ 的用法而已!
因此得出来:
*vp++ 跟 *(vp++)意思一样
(*vp)++意思不一样 : (*vp)指:先跟vp解引用,在用++
我们大家都知道:随着数组下标由低到高的增长,由地址到高地址!
因此:上述代码:在for循环中:
for (vp = &valuer[0]; vp < &valuer[5];) { *vp++ = 0; //printf("%f ", *vp); } 可以改写为: for (&valuer[n_ualues - 1]; vp >= &valuer[0]; vp--) { *vp = 0; }
到此为止,对于指针的运算系列(1):指针加减整数; 指针的比较大小,已经完美结束,读者要是有疑惑,请联系笔者进行删改!