打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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


【每日一句】

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
1分钟彻底理解C语言指针的概念
C语言基础知识最核心的指针知识总结第一部分(页内代码可以复制)
「20180101」山峰数学自我提升(旋转—分必合)
AC781X Datasheet_CHS(1)
简单几何最值,给你1秒钟,写出PA PB PC PD最大值
为什么说指针是C 语言的精髓?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服