数组名通常被视为指向数组首元素的指针,就算你中括号里面的数组下标不是0也是如此(此前已说)
所以它不是一个可以直接赋值的变量
同时,数组在内存中是连续存储的,直接赋值不会自动处理数组中每个元素的复制
所以如果你想copy数组,你可以用循环、也可以用memcpy,之前已经提到
栈与堆的区别
- 栈(Stack):
- 栈内存是自动管理的,通常用于存储局部变量和函数调用的上下文
- 当函数返回时,栈上的内存会被自动释放,局部变量的生命周期结束
- 堆(Heap):
- 堆内存是手动管理的,适合存储动态大小的数据结构
- 动态分配的内存不会在函数返回时自动释放,直到程序显式调用
free
(在C中)
栈的大小通常是有限的,具体大小取决于操作系统和编译器的设置。如果栈空间不足,可能会导致栈溢出(stack overflow)
//用了vs就知道了,老是栈溢出
同时,栈内存的分配和释放速度非常快,因为它只涉及指针的移动,而不需要复杂的内存管理
正是由于函数的局部变量在栈上分配内存的,当函数返回时,这些局部变量的内存会被自动释放(实际上是通过移动栈指针来实现的,而不是逐个清理)
但是,动态分配的内存不会在函数返回时自动释放,直到程序显式调用free
(在C中)
动态分配提供的内存是在堆上分配的,而堆内存的生命周期是由程序员控制的。所以为了避免内存泄漏,还是希望你在不再需要这块内存时显式地释放它
//如果你对一个数组已经初始化了,它就成为了一个静态变量,那么就不要再对它进行动态分配了,会出问题的
Comments NOTHING