下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

C指针的算术运算:递增递减以及比较

作者:课课家教育     来源: http://www.kokojia.com点击数:1229发布时间: 2016-07-21 17:06:45

标签: C指针算术运算C指针递增C指针比较C指针递减

大神带你学编程,欢迎选课

  C语言的指针是C语言中的重点,其实所有的编程语言中指针都是至关重要的部分。在另一篇文章中我对C语言指针的概念以及简单的运用做了简单的说明。在本文中将会继续对指针的知识深入,下面会对指针的递增、递减以及算术符进行说明。

  指针的算术运算

  指针是一个用数值表示的地址。指针的有限算术运算:自增(++), 自减(--), 加上一个整数(+, +=), 减去一个整数(-, -=), 以及减去另一个指针。

      举个例子帮助理解:

指针运算符举例

  图中可以看出,p++之后对应的地址向高地址增加了4个字节。我们来分析程序:指针p的类型是int,所指向的类型为int。然后它被指向整形变量a(强制类型转换不会改变a的类型),然后p++,在编译器中它把指针ptr 的值加上了sizeof(int)也就是加上了4,因为在32 位程序中,int 占4 个字节。由于地址是用字节做单位,所以p所指的地址增加了4个字节(如图)。

  要注意的是:此时的a并没有发生变化,变化的是p。p原本指向a[0],但是在p++之后,p指向a[3](char类型的长度是一个字节)。

  指针的递增

  指针和数组有一个区别:变量指针可以递增,但是数组却不行,因为数组是一个常量指针。上面的例子中也是指针的递增,不过用的是char类型的数组,下面举例的代码中是int类型的数组,我们看看两者之间的不同。

指针的递增

  图中的结果在p++之后,却只是在数组中的增加了一个位置,这是因为int类型长度是一个字节。

  指针的递减

指针递减举例

  和递增一样的方法,这里就不做解释了。

  指针比较

  指针也是可以用作比较的,可以运用算术运算符进行比较,例如==、<、>。在一个程序中如果有两个指针分别指向两个不同的变量,就可以进行大小比较。

  例如:

用指针比较举例

      图中的数组是int类型的,b1、b2指针也是指向int类型的。一个指向a[0],一个指向a[4]。在对指针所指向的变量进行大小比较的时候要注意,要加上* 才代表所指向变量的值。

      下面举一个误区:

指针容易误解的地方

       看完这个程序你认为输出会是什么?

       “**ptr=h **ptr=e”?这你就错了

       ptr是char **类型,指向了一个char *类型,也就是说ptr指向了&p,那么在ptr++的时候就加上了一个sizeof(char *),也就是加4,。所以是&p+4,但是&p+4并不在a数组中,可能指向内存中随机位置。谁知道呢?在这里我就不把结果的代码发出来,因为根本发不出来,程序直接出错。

        运算符&和*

         这里&是取地址运算符,*是间接运算符。

        要注意的是,在代码中你会发现在获取int或者char类型的时候,有时候需要有时候不需要。就&a来说,如果a是数组的时候可以直接指向a,但是你要指向a[2]就要用&a[2]。如果a是字符也需要&a。

        *p 。直接使用*p 的结果是p 所指向的东西。

        本文对指针的算术运算进行了简单的介绍,指针是C的重点也是难点,其实说难也不难。只要你认真的记住一些指针中容易混淆的地方,指针对你来说就不难了。如果你编写指针的程序总是出错,你要注意&和*的运用是否正确,很多初学者都是在这个地方不注意导致的。

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程