本实验报告主要讨论了动态申请二维数组和矩阵加法的相关知识。在本次实验中,我们首先学习了在C语言中动态申请二维数组的方法,通过使用指针动态申请内存,并及时释放内存,实现了一个4*5的矩阵。同时,我们也讨论了函数内部定义的变量作为返回值的问题,以及动态申请内存的有效性。在矩阵加法的例子中,我们实现了返回一个二维int指针作为函数的返回值,并解释了为什么函数内部定义的变量可以直接作为返回值而不会发生内存访问错误。最后,我们讨论了动态申请的内存是在堆空间,而函数返回值之后释放的是栈空间的原因,从而解释了在函数内申请的动态数组不会被释放,在函数外依然有效的原理。
在本次实验中,我们首先学习了动态申请二维数组的方法。在C语言中,动态申请一个二维数组需要先动态申请若干个一维数组,再对每个一维数组动态申请内存。在本次实验中,我们创建了一个4*5的矩阵,需要先动态申请4个二维int指针,再对每个二维int指针动态申请五个一维int指针。这一过程可以通过以下代码实现:
```
int **matrix = new int*[4];
for (int i = 0; i < 4; i++){
matrix[i] = new int[5];
}
```
在实验中,我们还讨论了在程序运行过程中如何及时释放动态申请的内存。对于二维指针来说,同样需要先释放每个一维指针,再释放4个二维指针。这一过程可以通过以下代码实现:
```
for (int i = 0; i < 4; i++){
delete []matrix[i];
}
delete []matrix;
```
其次,在本次实验中,我们讨论了函数内部定义的变量作为返回值的问题。以矩阵加法为例,在函数内部定义的变量A3作为返回值返回给调用者。虽然这里A3是在函数内部定义的局部变量,但它可以作为返回值而不会导致内存访问错误。这是因为动态申请内存是在堆空间,而函数返回值之后释放的是栈空间。因此,在函数内申请的动态数组不会被释放,在函数外依然有效。
最后,在本次实验中,我们实现了矩阵加法,并返回了一个二维int指针作为函数的返回值。在实现矩阵加法的过程中,我们可以直接访问和返回动态申请的二维数组。这是因为动态申请的内存是在堆空间,而函数返回值之后释放的是栈空间。因此,在函数内申请的动态数组不会被释放,在函数外依然有效。
总的来说,本次实验主要讨论了动态申请二维数组和矩阵加法的相关知识。通过实践,我们掌握了在C语言中动态申请二维数组的方法,并了解了函数内部定义的变量作为返回值的原理。同时,我们也学习了动态申请的内存是在堆空间,而函数返回值之后释放的是栈空间,从而解释了在函数内申请的动态数组不会被释放,在函数外依然有效的原理。这些知识对于我们进一步学习和使用C语言具有重要的指导意义。