C语言指针变量的运算

1

前言

指针变量也是可以进行运算的,如指针变量对其自身加上某个整数或减去某个整数,这在内存上体现为:相对这个指针向后偏移多少个单位或向前偏移了多少个单位,这里的单位与指针变量的类型有关。在32bit环境下,int类型占4个字节,float占4字节,double类型占8字节,char占1字节。

【注意】一些处理整数的操作不能用来处理指针。例如,可以把两个整数相乘,但是不能把两个指针相乘。

2

示例程序

#include <stdio.h>

int main(void)
{
   int    a = 10, *pa = &a;
   float  b = 6.6, *pb = &b;
   char   c = 'a', *pc = &c;
   double d = 2.14e9, *pd = &d;
 
   //最初的值
   printf("pa0=%d, pb0=%d, pc0=%d, pd0=%d\n", pa, pb, pc, pd);
   //加法运算
   pa += 2;
   pb += 2;
   pc += 2;
  pd += 2;
   printf("pa1=%d, pb1=%d, pc1=%d, pd1=%d\n", pa, pb, pc, pd);
   //减法运算
   pa -= 1;
 pb -= 1;
 pc -= 1;
 pd -= 1;
   printf("pa2=%d, pb2=%d, pc2=%d, pd2=%d\n", pa, pb, pc, pd);

return 0;
}

运行结果为:

pa0=6422268, pb0=6422264, pc0=6422263, pd0=6422248
pa1=6422276, pb1=6422272, pc1=6422265, pd1=6422264
pa2=6422272, pb2=6422268, pc2=6422264, pd2=6422256

解析:

举例说明pa0→pa1→pa2的过程,其他类似。pa0+2*sizeof(int)=pa1,pa1-1*sizeof(int)=pa2。因为pa为int类型的指针,所以加减运算是以4字节(即sizeof(int))为单位地址向前向后偏移的。看下图:

如图:pa1所指向的地址在pa0所指向地址往后8字节处,pa2指向地址在pa1指向地址往前4字节处。

从本示例程序中,还可以看出:连续定义的变量在内存的存储有可能是紧挨着的,有可能是分散着的。

以上就是关于C语言指针变量运算的一些总结:指针变量与整数相加相减是相对该指针指向的地址向后向前偏移多少个单位。这里的单位不能认为总是1。在32bit环境下,char类型指针的偏移单位才是1字节,int类型指针偏移单位是4字节,float类型指针偏移单位是4字节,double类型指针偏移单位是8字节。

推 荐 阅 读

【常见】getchar()、getche()、getch()的区别?
【知识点】#define与typedef的区别?
【常用】static有几种用法?

【常用】extern怎么用?

【易错】char *str与char str[]的区别?

【提高效率】你应该用复合赋值语句?

【知识点】来看一看volatile关键字

【知识点】C语言变量默认的初值是?

【易错】C语言内存对齐问题

end

【每日一句】

有时候,我们活得很累,并非生活过于刻薄,而是我们太容易被外界的氛围所感染,被他人的情绪左右。

来都来了 点个赞再走吧~~~

(0)

相关推荐

  • 初中数学:勾股定理-高难度压轴题

    本公众号所推送解题经验为原创内容,均为个人思路方法,同行请勿抄袭! 偶然翻到的这道题,看了一下,对同学们来说还是挺有难度的.关键是思维的开放性,会有很多同学脑洞打不开. 这道题,咋一看,是不是感觉缺条 ...

  • 点P是正△ABC内的一点,且PA=3,PB=4,PC=5。求△ABC的面积

    点P是正△ABC内的一点,且PA=3,PB=4,PC=5。求△ABC的面积

  • C语言的灵魂指针,什么是指针变量?

    C语言的灵魂指针,什么是指针变量? 原创2021-07-07 19:58·峰哥linux编程学堂 指针变量 学习了取地址运算符之后,我们可以使用取地址运算符取出一个变量的地址.例如: 编译结果如下: ...

  • 【C语言更新】指针变量的基本使用使用

    文/Edward 当我们将一个指针变量定义好之后,接下来需要考虑的问题就是如何来使用这个指针变量了.前面学习普通变量的时候,我们知道,一个变量的操作其实就是分成读和写两个步骤.而指针变量在平时使用的时 ...

  • C语言指针用得好犹如神助!这些使用技巧值得收藏!

    指针用的好犹如神助,用不好会让你叫苦连连,但大多数人是用不好指针的,所以后来的很多语言都把指针封装,屏蔽. 比如JAVA:java是没有指针的,但是很多地方都用到指针,不过不对用户开放,语言的自身机制 ...

  • R语言工具变量与两阶段最小二乘法

    原文链接:http://tecdat.cn/?p=5374 我们要估计的模型是 其中 是解释变量, 和 是我们想要估计的系数.x是控制变量,d是治疗变量.我们对我们治疗d对y的影响特别感兴趣. 生成数 ...

  • R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

    原文链接:http://tecdat.cn/?p=9390 介绍 向量自回归(VAR)模型的一般缺点是,估计系数的数量与滞后的数量成比例地增加.因此,随着滞后次数的增加,每个参数可用的信息较少.在贝叶 ...

  • 搞懂C语言指针,看这篇就够了!

    说到指针,估计还是有很多小伙伴都还是云里雾里的,有点"知其然,而不知其所以然".但是,不得不说,学了指针,C语言才能算是入门了.指针是C语言的「精华」,可以说,对对指针的掌握程度, ...

  • JavaScript入门-js的变量以及运算

    关于js变量 变量,就是一个用来存储数据的容器 一般来说,我们的变量都是可以得先声明,再使用,就像是一个东西先必须存在,才能看得见摸得着.然而在js里(es5),可以先使用,后声明. a = 100; ...

  • C语言指针学习总结

    作者:driveby 来源:https://www.cnblogs.com/KKSJS/p/9622812.html 上学的时候学习C语言,最烦的就是里面指针,可是指针也恰恰是C语言的灵魂. 最近在重 ...

  • C 语言指针:从底层原理到花式技巧,用图文和代码帮你讲解透彻

    一.前言 如果问C语言中最重要.威力最大的概念是什么,答案必将是指针!威力大,意味着使用方便.高效,同时也意味着语法复杂.容易出错.指针用的好,可以极大的提高代码执行效率.节约系统资源:如果用的不好, ...