关于指针的问题,请大神回答下

一个粉丝两个鲜肉包 2016-10-12 07:55:47
定义了一个指针变量,不初始化,不赋值,那么这个变量里面真的是不存放任何地址吗??
比如:
int*p;
printf("%p",p)
我知道不初始化,程序会报错,但是我就是想知道里面到底放了什么,是一个随机地址???我用VS2015调试过,只能监视p,在经过int*p这个步骤后,p的地址显示oXcccccccc,而且char*p,监视之后也是oXcccccccc,那么这个地址是什么呢?
或者说,定义了一个变量,变量本身就有地址,这个地址放在哪里呢??
虽然问题比较怪,但还是想请教大神,有没有独到的理解??
...全文
269 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
:>????? 2016-10-13
  • 打赏
  • 举报
回复
引用 5 楼 qq_36140737的回复:
定义一个char p试试多少啊?
哎,忽略上面的回答吧。 我作为一个新手,只是想表达下个人看法。 首先,c语言里面,你随便拿来一个变量p,然后来找这个p里面的地址指向,是不是哪里出了问题?再者,连p自己都不知道自己是哪里的,它怎么来指定一个地址给你?(p是虚拟) 你把p换成a,b,c也一个道理。 当然,我作为个小白。我认为,你可以想出其它的方法来解决你的疑惑。 至于指针这东西嘛,本来就没有指针。只是拿来用于形象的表达。 楼上的系统提示不错,给个赞。
:>????? 2016-10-13
  • 打赏
  • 举报
回复
定义一个char p试试多少啊?
赵4老师 2016-10-13
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:
windows里常见的内存填充数据含义 * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
starytx 2016-10-13
  • 打赏
  • 举报
回复
只要知道这个地址不可用就行了,研究具体值没有意义
小灸舞 版主 2016-10-13
  • 打赏
  • 举报
回复
windows里常见的内存填充数据含义 * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory
:>????? 2016-10-13
  • 打赏
  • 举报
回复
*p未被初始化,其存储的值是随机值。在定义指针变量后,系统分配的只是指针本身的.内存(指针),并没未分配存储数据的内存(指针的值)。就好比,上面说的,定义一个变量,变量单元未定义值前可能有随机值(垃圾值),在被赋值以后才会记录赋予的值。(我是小白,我找的答案。)
:>????? 2016-10-13
  • 打赏
  • 举报
回复
int p[5]; printf("%p %xd",&p,p); printf("\n%p %xd",&p[1],p[1]);
:>????? 2016-10-13
  • 打赏
  • 举报
回复
试试这个,虽然,不知道能不能帮你。
AlbertS 2016-10-13
  • 打赏
  • 举报
回复
存放之前栈上留下的值 VC在调试时会将未初始的栈内存用0xcc填充,未初始的堆内存用0xcd填充 这些都是无意义的值,就是为了方便你调试的,实际上如果工具不给你初始化,就是一个随机值
paschen 2016-10-12
  • 打赏
  • 举报
回复
存放之前栈上留下的值 VC在调试时会将未初始的栈内存用0xcc填充,未初始的堆内存用0xcd填充

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧