char *详细指针
2015-10-18 15:51
260 查看
我前段时间写的char*和char[]差额。今char*做一个更深入的了解
1:char像指针和其他指针,也定义一个地址,例如int*它定义了一个堆栈,4字节,char*之,现在写一段代码
内存分布情况:
我们能够看到,在这样的情况下char*表示的意思是简单的字符,这个时候,依照常理。int占用4个字节,char占用一个字节
2:假设用char*代表字符串呢。,上篇文章我大致理解,char*代表字符串存储,它作为一个指针的地址入栈,栈内存储的是指向rodata 区域段的地址,char*字符串的内容存储在rodata段内,c++的内存存储分配上,定义rodata区域是仅仅读区域。规定仅仅读区域存储的数据无法更改,仅仅能读取,依照这个思路。从新写一段代码。验证
这里,我须要知道的是p指针的地址,p的值。以及p的值是不是指向一块新的地址
首先查看了p指针栈中的字节数
我查看了&p的地址:他的地址为0x0032faac。它的这块区域存储的值为:48 dd 93 00
依照解释上,p的地址的值是依照栈的存储的,它的值存储的应该是他指向的“hello”的地址才对。可是48 dd 93 00的值代表什么意思。依照栈的入栈顺序,是0x0093dd48这个地址么,是这个地址就是p指向的rodata区域的地址么。这个地址存储着“hello”么。
我试着敲击了0x0093dd48这个栈内存储的地址
发现这个内存地址存储的就是“hello”的ascii码,因为是仅仅读区域的内存。我们试着想一下它的传输机制,以及更改栈或者更改指向地址,或者更改指定地址的内容等等,看是不是错误符合自己的预先的要求,这里就不相信的解释了
1:char像指针和其他指针,也定义一个地址,例如int*它定义了一个堆栈,4字节,char*之,现在写一段代码
#include<iostream> using namespace std; int main() { int a=12; char b='67'; int *c=&a; char *d=&b; return 0; }
内存分布情况:
我们能够看到,在这样的情况下char*表示的意思是简单的字符,这个时候,依照常理。int占用4个字节,char占用一个字节
2:假设用char*代表字符串呢。,上篇文章我大致理解,char*代表字符串存储,它作为一个指针的地址入栈,栈内存储的是指向rodata 区域段的地址,char*字符串的内容存储在rodata段内,c++的内存存储分配上,定义rodata区域是仅仅读区域。规定仅仅读区域存储的数据无法更改,仅仅能读取,依照这个思路。从新写一段代码。验证
#include<iostream> using namespace std; int main() { char *p="hello"; return 0; }
这里,我须要知道的是p指针的地址,p的值。以及p的值是不是指向一块新的地址
首先查看了p指针栈中的字节数
我查看了&p的地址:他的地址为0x0032faac。它的这块区域存储的值为:48 dd 93 00
依照解释上,p的地址的值是依照栈的存储的,它的值存储的应该是他指向的“hello”的地址才对。可是48 dd 93 00的值代表什么意思。依照栈的入栈顺序,是0x0093dd48这个地址么,是这个地址就是p指向的rodata区域的地址么。这个地址存储着“hello”么。
我试着敲击了0x0093dd48这个栈内存储的地址
发现这个内存地址存储的就是“hello”的ascii码,因为是仅仅读区域的内存。我们试着想一下它的传输机制,以及更改栈或者更改指向地址,或者更改指定地址的内容等等,看是不是错误符合自己的预先的要求,这里就不相信的解释了
相关文章推荐
- 设计模式之工厂模式
- UVA 10765 Doves and bombs 割点
- 控件同步
- Android应用程序资源文件的编译和打包原理
- NYOJ——463 九九乘法表
- 剑指offer第二十题【包含min函数的栈】c++实现
- POJ1837
- 百度api语音
- 旋转数组的最小数字
- Aizu 0525 Osenbei(状压+贪心)
- 信息安全系统设计基础第五周学习总结
- ACM-ICPC国际大学生程序设计竞赛长春赛区(2015)地区赛有感
- 多态polymorphic 内存图的小小示例
- Android Studio使用疑难问题汇总
- 关于Eclipse 和 IDEA 导入library库文件 的步骤
- 浅谈thrift TVirtual*
- Ubuntu下安装codeblocks步骤
- linux内核链表回顾-(2)
- 学习IT参考路线
- clean room 与 天干物燥