Ken*_*and -3 c++ heap stack pointers
目前在弄清楚为什么这个函数不能通过函数完全初始化main中的指针时遇到一些麻烦.这是我正在尝试做的一个例子.
#include <iostream>
void stuff(int * p)
{
p = new int;
}
int main()
{
int * p;
stuff(p);
*p = 1;
std::cout << *p << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
基本上我试图让它成为一个函数使整数指针访问堆.在那之后,我用间接运算符和中提琴打印出来,我有一个输出.什么不起作用是p不是初始化.我究竟如何使用函数初始化指向堆的指针?
您的问题是您按值传递指针.
因此该函数stuff()获取指针的副本.
void stuff(int * p) // This is a copy of the value you passed in
{
p = new int; // Here you modify the local copy.
} // The external value of p is unaffected.
Run Code Online (Sandbox Code Playgroud)
有几种方法可以解决这个问题.但我认为最好的方法是返回函数的结果(而不是传递它).
int* stuff()
{
return new int;
}
Run Code Online (Sandbox Code Playgroud)
然后使用是
p = stuff();
Run Code Online (Sandbox Code Playgroud)
但是你可能正在尝试学习如何获得一个函数来改变一个对象的值.在这种情况下,您需要传递对象的引用.
void stuff(int*& p) // The & means it is a reference to int*
{
p = new int;
}
Run Code Online (Sandbox Code Playgroud)
用法:
stuff(p); // same as your original code.
Run Code Online (Sandbox Code Playgroud)
在这里,您将引用传递给p函数.引用是现有对象的另一个名称.您对函数中的引用所做的任何更改都将镜像到函数外部的对象中.
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |