“指针变量不用分配空间也可以存储数据”
2012-02-29 18:08
1221 查看
今天下午 我们进行了c语言考试,考完后,我的脑中浮现出来:指针也是变量,那么该指针变量一定也是有地址的,于是我就动手验证了一下指针变量的地址。
首先我要先说明一下, 我们在用指针变量一定不要忘记分配空间,用完后不要忘记释放空间;之所以把这篇文章这么命题,是因为我在验证 存储指针变量的地址 的过程中对变量有了一点自己的认识。
以下 是我 为了 验证“存储指针变量的地址” 自己动手 敲打 的代码, 希望 对大家 能有点帮助:
运行 结果 如下:
总结:
1. 在我们平时指针变量时一定不要忘记为它分配空间,最后别忘记释放空间。
2.以上的代码主要 表达的是: 指针变量 也需要 有地址记录的,而且该存储指针变量的地址是在栈空间上, 在以上的程序中我也是 改变了 存储 “指针变量”的地址 中的值 而实现的存储新的值。
3.可以将代码中的 *((char*)(&指针变量的名称)) 整体 理解为 一个 普通 的 字符型的变量my_char,这样 这句*((char*)(&p_no)) = 'a' 就可以简单的理解为: my_char = 'a';
4. 经过将近 一个半小时的 在vc6.0上验证后,我对指针的概念加深了一点,感觉这段时间 过得 很充实 。
5. 这是我 第一次 在 CSDN上 发表技术类文章, 而且我的 技术水平很菜,难免有些错误 和 疏漏之处, 希望各位CSDN上的前辈们 可以 积极的 指证我的过错,我一定会虚心接受,认真改正。
6. 最后 希望 各位 CSDN 上和我一样 刚刚 踏入 计算机领域的 同胞们 早日 学有所成, 为自己 带来 丰富多彩的好生活, 谢谢大家。
原创作者:Renzhibo 时间:2012年2月29日18:11:27
首先我要先说明一下, 我们在用指针变量一定不要忘记分配空间,用完后不要忘记释放空间;之所以把这篇文章这么命题,是因为我在验证 存储指针变量的地址 的过程中对变量有了一点自己的认识。
以下 是我 为了 验证“存储指针变量的地址” 自己动手 敲打 的代码, 希望 对大家 能有点帮助:
#include <iostream> #include <cstring> using namespace std; int main() { const char* str_example = "I am in heap"; char *p_no; // 未初始化的指针变量 char *p_null_str = NULL; // 初始化为 NULL 的指针变量 char *p_const_str = "Hello World"; // 初始化为字符常量的指针变量 char *p_heap_str = new char[strlen(str_example) + 1]; // 在堆中 分配存储空间 的指针变量 strcpy(p_heap_str, str_example); // 将 常量字符串 复制到 堆中 int a = 5; // a 变量 为了 对比 存储 “指针变量”(理解为一个普通变量) 的地址 的位置而设置的。 printf("a 的地址是%p\n", &a);/* 结果 表明 存储 “指针变量” 的地址 的位置 在栈空间上。 因此 才有 可以改变 存储“指针变量” 地址 的栈空间 为具体 的数据*/ printf("p_no \t\t指针变量的 地址是 地址是:%p\n", &p_no); printf("p_null_str \t指针变量的 地址是 地址是:%p\n", &p_null_str); printf("p_const_str \t指针变量的 地址是:%p\n", &p_const_str); printf("p_heap_str \t指针变量的 地址是:%p\n", &p_heap_str); printf("p_heap_str \t指针变量 存储的“地址值”是:%p\n", p_heap_str); *((char*)(&p_no)) = 'a'; // 将 存储 p_no 指针变量的 地址 强制转换成 字符指针类型,然后将该地址上的数据 改成 字符‘a’ *((char*)(&p_null_str)) = 'b'; *((char*)(&p_const_str)) = 'c'; /* *((char*)(&p_heap_str)) = 'd'; 如果 添上了 这条语句,就是 将 存放“p_heap_str地址”的 内存地址(仅第一个字节) 改变成了 ‘a’的值 而且 在 后面 释放 这块 空间时, 系统因为找不到“p_heap_str的地址”而找不到p_heap_str所指向的地址(即该指针所存的值)而报错*/ // 经过以上改变后 就可以看做是 普通的 字符型变量 输出 printf("p_no 的地址存得是 %c\n", p_no); printf("p_null_str 的地址存得是 %c\n", p_null_str); printf("p_const_str 的地址存得是 %c\n", p_const_str); printf("p_heap_str 的地址存得是 %s\n", p_heap_str); // 释放 delete[] p_heap_str; p_heap_str = NULL; return 0; }
运行 结果 如下:
总结:
1. 在我们平时指针变量时一定不要忘记为它分配空间,最后别忘记释放空间。
2.以上的代码主要 表达的是: 指针变量 也需要 有地址记录的,而且该存储指针变量的地址是在栈空间上, 在以上的程序中我也是 改变了 存储 “指针变量”的地址 中的值 而实现的存储新的值。
3.可以将代码中的 *((char*)(&指针变量的名称)) 整体 理解为 一个 普通 的 字符型的变量my_char,这样 这句*((char*)(&p_no)) = 'a' 就可以简单的理解为: my_char = 'a';
4. 经过将近 一个半小时的 在vc6.0上验证后,我对指针的概念加深了一点,感觉这段时间 过得 很充实 。
5. 这是我 第一次 在 CSDN上 发表技术类文章, 而且我的 技术水平很菜,难免有些错误 和 疏漏之处, 希望各位CSDN上的前辈们 可以 积极的 指证我的过错,我一定会虚心接受,认真改正。
6. 最后 希望 各位 CSDN 上和我一样 刚刚 踏入 计算机领域的 同胞们 早日 学有所成, 为自己 带来 丰富多彩的好生活, 谢谢大家。
原创作者:Renzhibo 时间:2012年2月29日18:11:27
相关文章推荐
- 为什么百度云可以给每位用户分配两T的存储空间?
- c++类不含有数据成员(静态除外),则不会为该类实例分配存储空间,该类实例只占用一个字节空间
- 设某计算机的逻辑地址空间和物理地址空间均为128KB,按字节编址。若某进程最多需要6页数据存储空间,页面大小为1KB,操作系统采用固定分配局部置换策略为该进程分配4个页框(物理块)。
- Windows 8 应用商店应用开发 之 应用程序的数据存储(2)应用程序存储空间
- SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
- C++:编写一个程序,用动态分布分配空间的方法计算Fibonacci数列的前二十项并存储到动态分布的空间中
- 利用集合完成象数据库那样存储数据,并且可以简单查询,利用map存储学生信息
- 在代码中给SQL2008中空间数据类型的存储过程赋值
- Oracle的存储结构 2013-03-26 23:22 276人阅读 评论(0) 收藏 举报 目录(?)[+] Oracle的存储结构 在ORACLE数据库中对于数据存储的管理可以从两方面来论述。
- Bundle可以存储的数据类型
- mysql中什么数据类型可以存储路径
- SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
- 表数据和索引数据分开独立表空间存储优点
- 网易视频云:Hadoop中空间数据的存储(一)
- OpenCV 数据初始化空间分配
- 发现了char可以做数组下标,而且不算在开出来的存储空间里···
- 一个高效的数据分页的存储过程 可以轻松应付百万数据
- C++防灾——为指针成员分配专门的存储空间
- SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
- python 8-4 如何使用线程本地数据,threading.local函数可以创建线程本地数据空间,属性对每个线程独立存在