指针变量 arr 是在栈区创建的,但是它指向的内存空间是在堆区中动态分配的。在函数中通过 malloc 函数动态分配的内存空间是在堆区中,这个内存空间的地址被赋值给了指针变量 arr,所以我们可以在其他函数中使用这个指针变量访问这个内存空间。需要注意的是,如果在函数中不使用 free 函数释放这个动态分配的内存空间,就会造成内存泄漏。因此,在使用完毕后应该及时释放这块内存空间,对这段说明给出具体的例子
时间: 2023-12-10 07:42:56 浏览: 65
指针和内存
好的,下面是一个具体的例子:
```c
#include <stdio.h>
#include <stdlib.h>
void func(int *arr, int n) {
arr = (int*)malloc(n * sizeof(int)); // 动态分配内存空间
for (int i = 0; i < n; i++) {
arr[i] = i; // 对内存空间进行赋值
}
}
int main() {
int *arr = NULL;
func(arr, 5); // 调用函数分配内存空间
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]); // 输出内存空间中的值
}
free(arr); // 释放内存空间
return 0;
}
```
在上面的例子中,我们定义了一个指针变量 `arr`,并将其初始值设为 `NULL`。然后我们调用了 `func` 函数,该函数通过 `malloc` 函数动态分配了大小为 `n` 的内存空间,并将其地址赋值给了指针变量 `arr`。在 `func` 函数中,我们对内存空间进行了赋值操作。最后,在 `main` 函数中,我们遍历了内存空间,并将其值输出。
需要注意的是,在使用完毕后,我们需要调用 `free` 函数释放这块内存空间,否则会造成内存泄漏。
阅读全文