这是我的程序:
#include <cstring>
const int SIZE =10;
int main()
{
char aName [SIZE]; // creates an array on the stack
std::strcpy(aName, "Mary");
return 0;
}
这个程序显然没有用,我只是想了解 strcpy 函数的行为。
这是它的签名:
char * strcpy (char * destination, const char * source)
所以当我这样做时:
std::strcpy(aName, "Mary");
我正在按值传递变量 aName。我知道 aName(主要)包含数组的地址。 那么这个断言是否正确:strcpy 创建了一个名为 destination 的局部变量,其值是我在 main 函数的堆栈上创建的数组 aName 的地址?
我问这个是因为它让我很困惑。每当我遇到地址时,通常是指向分配在堆...
上的内存谢谢!
最佳答案
无论何时遇到地址,并不意味着它总是指向分配给堆的内存。
你可以像这样把一个变量的地址赋值给一个指针
int a=5;
int *myPtr= &a;
现在,myPtr
是一个整数类型的指针,它指向在堆栈 上创建的变量的内存,这是a
具有值5.
因此,每当您创建一个指针并使用 new
关键字分配内存(地址)时,它都会在堆 上分配内存。所以,如果我像这样分配值,它将在堆栈上
int *myPtr= new int[5];
关于c++ - 堆栈数组 C++ 的 Strcpy 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361254/