二级指针为什么要动态分派内存
时间: 2023-11-24 15:32:57 浏览: 39
二级指针是一个指向指针的指针,也就是说它存储的是一个指针的地址。在使用二级指针时,需要先分配一块内存给指向的指针,然后再让二级指针指向这个指针。
如果不动态分配内存,直接定义一个指针变量,那么这个指针变量只能指向一个已经存在的指针,而无法创建出新的指针。
因此,当我们需要动态创建多个指针时,就需要使用动态内存分配来为每个指针分配一块内存空间,然后通过二级指针来访问这些指针。这样才能实现动态创建、管理和释放多个指针的功能。
相关问题
为什么malloc一段内存保存到二级指针
使用malloc申请内存保存到二级指针的原因是,二级指针可以让我们在动态分配内存的同时修改指向的地址,从而达到在程序运行过程中动态分配内存的目的。
例如,在使用一维数组时,我们可以在编译时确定数组的大小,但如果我们需要在程序运行过程中根据需要动态分配内存,就需要使用二级指针了。
例如:
```
int **array;
int n, m;
scanf("%d%d", &n, &m);
array = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++) {
array[i] = (int *)malloc(m * sizeof(int));
}
```
这段代码实现了一个二维数组的动态分配,我们可以在程序运行过程中根据需要动态调整数组的大小。
为什么单链表要传二级指针
单链表需要传递二级指针是因为在对链表进行操作时,可能需要修改链表头部节点的指针值。由于函数参数是值传递的,如果只传递一级指针,那么在函数内部修改指针的值只会影响到函数内部的指针副本,而不会影响到原始链表头部节点的指针值。
通过传递二级指针,函数可以修改原始链表头部节点的指针值。这样,在函数内部对链表进行的任何操作都能够直接反映到原始链表中,而不仅仅是函数内部的局部变量。这样可以确保链表操作的一致性和正确性。