指针进阶之指针运算
2015-12-16 15:01
127 查看
当初博主在大学学指针的时候可谓是一头包,尤其后面学到二维指针,什么指针数组啊,指针字符串啊。什么的更是云里雾里。不明其中道理
其中如果涉及到指针运算什么的更是痛不欲死。
现简单的将我当时遇到的情况以及如何解决的过程思路分享出来
指针及数组
我们简单定义一个数组
int array[5];
array是数组名,array代表的是数组整块内存,即sizeof(array)= = 20假设sizeof(int) == 4,array的内容是数组的首地址即arr = &arr[0];array也可以看做是一个常量,也就是不能有array++
之类的运算
int *p;
p=array;
p是指向Int 类型的指针变量,p=array是吧数组的首地址赋给p,也就是说p代表的是数组首地址,然后由于p是一个变量,可以进行变量的很多操作也就是说可以进行p++之类的操作
所以sizeof(p) == sizeof(int *) ==4 一般都是等于这个值的
同理运用到字符串数组这么一分析是不是一目了然
紧接着:
int a[5] = {0,1,2,3,4};
int *p = (int *)(&a+1);
cout<<*(a+1)<<<<*(p-1);
a 是 代表的是整个数组内存,a 的值是该数组内存的首地址, 对 a
取地址(&a)这里的 &a 是指向整个数组的内存块,所以 a 的值与 &a 的值是一样的,都是该数组的首地址,但他们的含义是不一样的。
所以结果应该为
1,4
其中如果涉及到指针运算什么的更是痛不欲死。
现简单的将我当时遇到的情况以及如何解决的过程思路分享出来
指针及数组
我们简单定义一个数组
int array[5];
array是数组名,array代表的是数组整块内存,即sizeof(array)= = 20假设sizeof(int) == 4,array的内容是数组的首地址即arr = &arr[0];array也可以看做是一个常量,也就是不能有array++
之类的运算
int *p;
p=array;
p是指向Int 类型的指针变量,p=array是吧数组的首地址赋给p,也就是说p代表的是数组首地址,然后由于p是一个变量,可以进行变量的很多操作也就是说可以进行p++之类的操作
所以sizeof(p) == sizeof(int *) ==4 一般都是等于这个值的
同理运用到字符串数组这么一分析是不是一目了然
紧接着:
int a[5] = {0,1,2,3,4};
int *p = (int *)(&a+1);
cout<<*(a+1)<<<<*(p-1);
a 是 代表的是整个数组内存,a 的值是该数组内存的首地址, 对 a
取地址(&a)这里的 &a 是指向整个数组的内存块,所以 a 的值与 &a 的值是一样的,都是该数组的首地址,但他们的含义是不一样的。
所以结果应该为
1,4
相关文章推荐
- as3.0动态添加代码
- Windows下Git的安装
- python and ice
- conn.setAutoCommit()用法及作用
- 剑指offer系列之五十二:表示数值的字符串
- Java String.Split(String regex)方法之设置多个分隔符
- 视频编解码和MPEG4编码
- 用GDB调试程序
- array_diff函数的注意事项
- 通达OA 2015 8.12版本取消注册功能介绍
- LeetCode Insertion Sort List
- Checkstyle的配置详解
- ubuntu设置环境变量及过程
- 源码推荐(12.16B):仿滴滴广告弹出页,AF数据请求封装
- jquery中 empty 和remove的区别
- 关于android sdk 23 无法引入httpclient问题的解决
- 黑马程序员——第十篇:异常处理、File类
- 经历的一些java面经
- 无法打开包括文件:“mysql..h”: No such file or directory
- Android-JNI(5)-C语言调用Java函数