指针和内存(02)
来源:互联网 发布:如何利用网络做销售 编辑:程序博客网 时间:2024/06/05 15:08
day 2
测试环境:Linux 2.6.32-279.el6.x86_64
测试代码:pointer_cal.cpp
#include <stdio.h>/** * test code: pointer_cal.cpp * test environment: Linux 2.6.32-279.el6.x86_64 * * 总结: * 1. 指针变量进行 +/- 运算时,实际上是指针移动的一个过程 * 2. 指针在移动的过程中,移动的步长取决于指针被声明的类型的sizeof长度, * 而不是指针指向的内存空间所属的变量类型的sizeof长度, * 也不是单纯地移动指定的单位的内存地址 */int main(){ // 声明一个int型的变量 i int i = 7; // 声明一个int型的指针变量 ip,并取变量 i 的地址并赋值给ip // 此时ip中存储的内容为变量i的内存地址 int *ip = &i; // 声明一个char型的指针变量 cip,并取变量 i 的地址进行强制转换成char类型的指针 // 然后赋值给cip,此时cip中存储的内容为变量i的内存地址 // @see: http://blog.csdn.net/fawn2315/article/details/48001907 char *cip = (char*)&i; printf("sizeof(int): %d\n", sizeof(int)); printf("sizeof(char): %d\n\n", sizeof(char)); printf("&i: %p\n\n", &i); // 指针变量被声明为int类型时,则在运算时会根据sizeof(int)的步长来进行移动指针 // 指针变量被声明为char类型时,则步长会变为sizeof(char) // 像下面的指针变量cip,被声明为char类型的指针,虽然其指向的地址存放的数据是属于 // int型的变量 i的,但是在cip进行运算时是以cip声明时设置的类型(char)的长度为步长 printf("ip: %p\n", ip); ip++; printf("ip + 1: %p\n", ip); printf("ip + 1 == %p + 1 * sizeof(int)\n\n", &i); printf("cip: %p\n", cip); cip += 3; printf("cip + 3: %p\n", cip); printf("cip + 3 == %p + 3 * sizeof(char)\n\n", (char*)&i); printf("---------------------------\n\n"); char c = 'A'; char *cp = &c; int *icp = (int*)&c; printf("&c: %p\n\n", &c); printf("cp: %p\n", cp); cp++; printf("cp + 1: %p\n", cp); printf("cp + 1 == %p + 1 * sizeof(char)\n\n", &c); printf("icp: %p\n", icp); icp += 2; printf("icp + 2: %p\n", icp); printf("icp + 2 == %p + 2 * sizeof(int)\n", (int*)&c); return 0;}
编译 && 执行
g++ -g pointer_cal.cpp -O0 -o pointer_cal./pointer_cal
执行结果
0 0
- 指针和内存(02)
- 关于指针和内存
- C#和内存指针
- C#和内存指针
- 指针和内存判断
- C#和内存指针
- C#和内存指针
- 指针和内存
- 指针和动态内存
- 指针和内存(01)
- 指针、内存和字节
- 指针和内存
- 指针和内存
- 指针和内存
- 指针和内存
- 指针和内存错误
- 指针和内存管理
- c#内存管理和指针
- 有用的 here Document
- Qt 导出EXCEL文件
- seaJs使用记录
- 快速排序的优化
- IO流(1)
- 指针和内存(02)
- MAC用Android Studio 没有R文件的处理办法
- Visual C#2010学习笔记九之.dll类库文件的引用
- C++拷贝构造函数详解
- LeetCode:Binary Tree Paths
- 基于Mesos和Docker的分布式计算平台
- mongodb副本集(replSet)
- 微信分享功能
- Jave创建http连接