一个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为什么 展开
1: 如果返回值类型是int,那么函数中必须返回:return *p
2:如果返回值类型是*int,那么函数中必须返回:return p
为什么?但是得到的结果都是指针所指的变量,
怎么令返回结果为地址(16进制的数如0012FF)
函数的定义
int* pointer()
{int v=0;
p=&v;
return p;}
cout<<pointer; 得到0,而不是0012FF为什么 展开
6个回答
展开全部
呵呵,首先啊,要理解这个指针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是那个函数返回的指针。
希望俺的回答能帮到你!
所得到的结果不都是指针所指的变量的,第一种情况得到的是所指的变量,第二种情况得到的是指向这个变量的指针,用到这个返回值时,第一种情况可以直接用,第二种情况必须加上一个*号。
最后一个问题,其实返回结果为int *时,已经是得到地址了,因为指针变量(int *)里存的就是地址。如果你要把这个地址打印出来,可以这样cout << pp; pp是那个函数返回的指针。
希望俺的回答能帮到你!
展开全部
想知道变量的地址?直接用取址符&就可以得到。
或者把指针强制转换成数值型,
int a;
int * p = &a;
unsigned int addr = (unsigned int)p;
另外,32位windows环境下的指针是32位的。
或者把指针强制转换成数值型,
int a;
int * p = &a;
unsigned int addr = (unsigned int)p;
另外,32位windows环境下的指针是32位的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果p 是指针 那 return p 就是返回地址。你只要 把p 的值输出来 就是地址的值了
追问
实验表明,输出返回值的结果是指针所指的变量。不明白
*p 是int类型的
p是*int类型的,
虽然cout<<p得到的是16进制数。
但将返回值输出一定不是16进制数。亲自试验的结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是 return &p 吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static变量在函数结束后不会注销,依然存在,
auto是真正的局部变量,函数结束后立即注销,变量注销后,占有的内存就不存在了,返回的地址自然是非法的,对应的是错指针
但是如果你用动态内存分配申请的内存空间不会注销,所以,必须在当前函数执行的后面加上释放语句
auto是真正的局部变量,函数结束后立即注销,变量注销后,占有的内存就不存在了,返回的地址自然是非法的,对应的是错指针
但是如果你用动态内存分配申请的内存空间不会注销,所以,必须在当前函数执行的后面加上释放语句
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为。auto是默认的,在一个函数中。函数体内的定义的变量是在stack区分配,在函数周期结束之后这些局部变量是要自动释放的。而static变量是静态区。函数周期结束之后也是不回收的。所以你懂了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询