C++指针问题

c++一般指针与动态指针有什么区别呢?是不是只要不用delete,动态指针会一直存在,可是我尝试过定义一个动态指针,为什么不能在不同的函数中获取里面的数据呢?求解... c++一般指针与动态指针有什么区别呢?
是不是只要不用delete,动态指针会一直存在,可是我尝试过定义一个动态指针,为什么不能在不同的函数中获取里面的数据呢?
求解
展开
 我来答
流行狼月
2011-08-05 · TA获得超过995个赞
知道答主
回答量:94
采纳率:0%
帮助的人:86.6万
展开全部
首先回答你第一个问题
一般指针通过取地址的方式去获得了一个数据空间的地址char *p = &s;(假设s是一个数组);动态指针的初始化char *p = malloc(10*sizeof(char))或者char *p = new(10*sizeof(char)),那么这个p指向的数组存放的数据就不是连续的了,就是说p指向了不连续的空间,而静态分配(一般的指针),你很明显的看到它取址了一个数组首地址,这个数组中存放的值必然是连续的,就是说p指向了一块连续的空间;
其次回答你第二个问题:刚才提到malloc和new 两种动态建立的方法。两者有什么区别呢?new一般是限于C++使用的(C中不常用),new一般用于开辟堆空间,malloc可以开辟堆也能开辟栈。
区别之一:new开辟的空间,会调用空间的构造函数,被new的空间会被初始化一定的数值
malloc 开辟的空间只是告诉你这块区域能存放某一种类型的数据但是这个时候具体数据并没有存放,要后期赋值。
区别之二:malloc 开辟的空间在函数结束的时候,会被自动free(p);p = NULL;并且那块空间也不被释放了,(简而言之,在哪个函数开辟,就在哪个函数结束时候被释放,但是new 则需要调用相应的析构函数才能被释放,i必须使用delete 去手动释放,假设你不手动释放,对不起,你内存泄露了,这个空间数据一致存放在那,但是你的指针p被free了,所以你找不到那块地址了,也就是不可见了。这个程序每执行一次,你2G的内存就会少一块空间,显然你不愿意,那么记得要释放哦。。。谢谢
百度网友34ea49a
2011-08-05 · TA获得超过894个赞
知道小有建树答主
回答量:297
采纳率:100%
帮助的人:396万
展开全部
指针(不论动态还是静态)都有作用域,只能在同一作用域内被调用。动态指针如果不释放,一直存在,但是在其他函数中不可见,自然不能调用,获取其中数据。

注意:存在和可用,是两个概念。要想使用某个个体,必须满足:
1. 该个体存在
2. 该个体可见
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ranpanf
2011-08-05 · TA获得超过801个赞
知道小有建树答主
回答量:435
采纳率:0%
帮助的人:396万
展开全部
你说清楚一定,是指针指向动态创建的内存,还是动态创建的指针?动态创建的内存在释放之前都是可以访问操纵的,只是,需要用指针来引用它,不可见只是这个指针无法使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-08-05 · 超过14用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:27万
展开全部
什么动态指针????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式