2024.08 更新
我感觉我写的不太对……以后有时间更新吧……
原文
最近在学习数据结构,学习到栈结构,遂打算以二维数组实现栈结构。由于在此之前我并没有实际在函数中操作二维数组,所以此次的写代码颇为曲折,当然最终还是有所收获的。
二维数组本质上也是数组,所以在c的函数中对二维数组进行操作依旧是对普通数组的操作。
首先我们需要有对这个二维数组的初始化函数InitStack
,参数为char ** stack
。
此时出现一个问题,我需要对指针使用malloc
分配堆内存,即使我传入的是一个指针,但是依旧无法分配内存,
1 2 3 4 5 6 7 8 9 10
| int InitStack(char** stackElem, int ElemNum) { stackElem = (char**)malloc(ElemNum * sizeof(char*)); for (int i = 0; i < ElemNum; i++) { stackElem[i] = (char*)malloc(sizeof(char) * 128); }
return 0; }
|
由于我本身需要操作的是指针(分配内存),而为了能在函数内操作,我需要获取操作对象的指针,也就是指针的指针(&stackElem),
代码修改过后为
1 2 3 4 5 6 7 8 9 10 11
| int InitStack(char*** stackElem, int ElemNum) { char **stackElemTmp = (char**)malloc(ElemNum * sizeof(char*)); for (int i = 0; i < ElemNum; i++) { stackElemTmp[i] = (char*)malloc(sizeof(char) * 128); } *stackElem = stackElemTmp; return 0; } char** stackElem=NULL; InitStack(&stackElem);
|
传入一个二维数组的指针,让这个指针指向分配过内存的二维数组从而实现二维数组通过malloc
分配内存。