一个c++返回指针的问题

如果一个函数返回指针p(假设是int型指针)那么:1:如果返回值类型是int,那么函数中必须返回:return*p2:如果返回值类型是*int,那么函数中必须返回:ret... 如果一个函数返回指针p(假设是int型指针)那么:
1: 如果返回值类型是int,那么函数中必须返回:return *p
2:如果返回值类型是*int,那么函数中必须返回:return p
为什么?但是得到的结果都是指针所指的变量,
怎么令返回结果为地址(16进制的数如0012FF)
函数的定义
int* pointer()
{int v=0;
p=&v;
return p;}
cout<<pointer; 得到0,而不是0012FF为什么
展开
 我来答
as_java
2011-08-19
知道答主
回答量:11
采纳率:0%
帮助的人:13万
展开全部
呵呵,首先啊,要理解这个指针P的含义,这个指针P是个指针变量,它里面存放的是某个变量的地址,比如:int a = 2; int *p = &a;这里&的作用就是取a的地址,然后存到p里面。当我们要访问这个a(也就是2啦)的时候,可以直接访问*p,这个*p就相当于a啦,也就是个int型;而p是还是个指针,也就是int * 型。所以,返回值是int 时,用return *p;返回值是int *时,用return p。
所得到的结果不都是指针所指的变量的,第一种情况得到的是所指的变量,第二种情况得到的是指向这个变量的指针,用到这个返回值时,第一种情况可以直接用,第二种情况必须加上一个*号。
最后一个问题,其实返回结果为int *时,已经是得到地址了,因为指针变量(int *)里存的就是地址。如果你要把这个地址打印出来,可以这样cout << pp; pp是那个函数返回的指针。
希望俺的回答能帮到你!
李少杰噢
2011-08-19 · TA获得超过114个赞
知道答主
回答量:146
采纳率:0%
帮助的人:59.1万
展开全部
想知道变量的地址?直接用取址符&就可以得到。
或者把指针强制转换成数值型,
int a;
int * p = &a;
unsigned int addr = (unsigned int)p;
另外,32位windows环境下的指针是32位的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tidus_forever
2011-08-19 · TA获得超过4399个赞
知道大有可为答主
回答量:2782
采纳率:100%
帮助的人:1852万
展开全部
如果p 是指针 那 return p 就是返回地址。你只要 把p 的值输出来 就是地址的值了
追问
实验表明,输出返回值的结果是指针所指的变量。不明白
*p 是int类型的
p是*int类型的,
虽然cout<<p得到的是16进制数。
但将返回值输出一定不是16进制数。亲自试验的结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
felixnan168
2011-08-19 · TA获得超过1330个赞
知道小有建树答主
回答量:339
采纳率:50%
帮助的人:269万
展开全部
应该是 return &p 吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
墨儿董子墨
2019-01-21 · TA获得超过1162个赞
知道小有建树答主
回答量:1779
采纳率:96%
帮助的人:8.4万
展开全部
static变量在函数结束后不会注销,依然存在,
auto是真正的局部变量,函数结束后立即注销,变量注销后,占有的内存就不存在了,返回的地址自然是非法的,对应的是错指针
但是如果你用动态内存分配申请的内存空间不会注销,所以,必须在当前函数执行的后面加上释放语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
建用竹斯年
2019-07-17 · TA获得超过1161个赞
知道小有建树答主
回答量:1797
采纳率:93%
帮助的人:8.2万
展开全部
因为。auto是默认的,在一个函数中。函数体内的定义的变量是在stack区分配,在函数周期结束之后这些局部变量是要自动释放的。而static变量是静态区。函数周期结束之后也是不回收的。所以你懂了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式