我正在一所快餐学校学习基础C ++编程,我有一些问题要修改,这对我来说没什么意义,我的意思是我认为我知道答案但是我想在这里和专家一起运行一个很好的理解,我已经尝试通过谷歌在线寻找具体的答案,但很难找到。
在下面的代码中将如何使用不同的变量(* mystring,msize,x,y, * px,new int)在C ++内存管理中管理?
class myclass
{
public:
char *mystring = “thestring”;
int msize = 200;
int myfunc(int x)
{
int y = 20;
x = x + y;
return x * y;
}
int main(void)
{
int *px = new int;
cin >> x;
cout << myfunc(x);
delete px;
}
}
现在我假设,当一个类在内存中实例化时,给定一个内存位置的开头和结尾,它会按照代码中的声明顺序创建一个值的副本,所以我猜测char *得到一个指针某种。
int msize将在之后,并且将是一个带有地址的8位值。
但我假设在课堂上调用函数?
答案 0 :(得分:-1)
这是我对你所说代码的最佳猜测:
#include <iostream>
using namespace std;
char *mystring = "thestring"; // extremely dangerous type mismatch, don't do this
int msize = 200;
int myfunc(int x)
{
int y = 20;
x = x + y;
return x * y;
}
int main(void)
{
int *px = new int;
cin >> *px;
cout << myfunc(*px);
delete px;
return 0;
}
变量'mystring'和'msize'是全局变量,其内存由编译器静态分配。这些变量在程序的任何运行期间都存在,并且通常可以通过程序的任何部分按名称访问。
'x'和'y'是函数'myfunc'的局部变量。它们存在并且只能在每次调用该函数时按名称访问。
'px'是函数'main'的局部变量。 'main'在某种程度上是特别的,通常,它是程序的入口点,当它返回程序退出时。所以,'px的生命周期基本上是程序的持续时间,尽管它只能通过'main'函数中的那个名称访问。
'new int'显式动态地为一个int分配内存,然后int可用,直到通过匹配的显式调用delete来释放它。
通常,当线程进入并退出变量的范围时(对于构造函数和析构函数也被调用),局部变量的内存被推送到(并弹出)正在运行的线程的堆栈。通过在C ++中调用new和delete(或在C中使用malloc和free),每个变量显式管理动态分配的内存。