C指针运算
来源:互联网 发布:软件的开发过程 编辑:程序博客网 时间:2024/05/17 23:42
先来看一个例题,写出下面一段程序输出结果:
int a[]={1,2,3,4,5};int *pa = a;int *p = (int*)(&a+1);printf("%d, %d\n", *(a+1), *(p-3));
结果:2, 3
a中的元素为整形,a是数组名,它是一个指针,故a的类型是 指向整形元素的指针,因为a是数组,所以&a的类型是指向整形数组的指针,这就意味着&a指向的元素是数组,所以&a+1中,这个加1操作应该根据指针指向元素类型来调整它最终在地址上增加的值
int a[]={1,2,3,4,5};int *pa = a;printf("%d %d %d %d\n",a,a+1,pa+1,&a+1);
对于a来说,它是指向整形整形元素的指针,整形在32位CPU上站4字节,上面代码输出内容为:
2293492 2293496 2293496 2293512
a+1 的地址想对于a的地址增加了4,即一个整形数据的大小,而&a+1的地址相对于a的地址增加了 5*4=20,这个20 就是a数组中5个整形元素占用的空间,这也就证明了指针与一个整数相加(或相减)后,地址的偏移量与此指针指向的数据类型相关.
再回来看上面那道题,&a+1指向了a数组末尾的后一个地址a[5](非法地址),&a+1又被转换为指向整形数据的指针,所以p=a+5,,故*(p-3) -->*(a+5 - 3)-->*a(a+2)-->a[2],即其值为3
0 0
- 【c/c++】指针运算
- C指针总结--指针运算
- C指针运算
- C经典 指针运算
- c指针的运算
- c 指针算数运算
- C ~ 指针的运算
- C语言指针的运算
- C基础知识--指针算术运算
- C语言指针的运算
- C-033.指针的运算
- C/C++之指针运算
- C语言:指针及其运算
- C语言:指针的运算
- C指针运算的妙用
- 娓娓道来c指针 (7)指针运算
- C指针解析 ------ 指针的算术运算
- 王学岗c语言指针和指针运算
- 商城二次开发入口简单研究---- 20140701
- hdu1166 敌兵布阵
- perl 基本语法介绍
- error:/usr/bin/ld:skipping incompatible ./libxxxx.so when searching for -lxxxx
- ftl转jsp格式
- C指针运算
- 【cocos2dx-3.0beta-制作flappybird】跟随时代的潮流,关于引擎升级
- STM32 DMA学习
- ExtJS中findRecord方法的bug及规避方法
- android错误之:android.content.res.Resources$NotFoundException: String resource ID #0x1
- uva 152 Tree's a Crowd(暴搜)
- EAS隐藏Table 上面的相关按钮:插入一行 新增一行 删除一行
- Android 计算字符串在屏幕上所占的长度和宽度(像素单位)
- linux命令--vi,vim