c++ - 堆栈数组 C++ 的 Strcpy 行为

标签 c++ arrays stack heap-memory strcpy

这是我的程序:

#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/

相关文章:

c# - 这些对象的引用是在栈上还是在堆上?

c - 如何为堆栈实现调试此 C 代码?

javascript - set array = 多维对象数组的一维值

c - C中的动态程序

c++ - C++/STL 中是否支持按属性对对象进行排序?

c++ - 分配器感知 `std::array` 风格的容器?

c++ - 数组值在 C++ 中自行改变

c++ - 将堆栈的值分配给另一个堆栈

c++ - 对已定义静态私有(private)变量的 undefined reference

c++ - 初始化嵌入在静态库中的 qt 资源