【发布时间】:2013-09-11 12:44:14
【问题描述】:
我在 C 中有一个任务来实现一个抽象数据类型 STACK。数据类型的性质需要需要分配内存的键结构。我的问题是,我的导师现在坚持让初始化函数接收一个指向键结构的指针。 init() 函数只会分配结构所需的内存并将字段设置为零,但需要为传入的指针分配该内存位置。
如果不让函数返回一个指针,或者传入一个 2 星指针,我想不出一种方法——这两种方法都是不允许的。我知道函数原型必须是(其中 stackT* 是指向关键堆栈数据结构的指针):
void init(stackT* stack);
我想出了这个并且效果很好:
void init(stackT** stack){
*stack = (stackT*) malloc(sizeof(stack));
(*stack)->count = 0;
return;
}
但它不遵守赋值的限制。
tl;dr 版本:
基本上,我怎样才能将指向堆栈数据结构 (&stackPtr) 的原始指针的地址传递到一个以一星指针作为参数的函数中,并且不会收到指针类型的警告?此外,一旦您将参数更改为(stackT* stack),即使我以任何一种方式传递相同的东西,下面的代码也不起作用 - 这就是我的问题所在。
我认为如果您打算传递指向指针的指针,则需要将参数作为 2 星指针。当您取消引用指针时,编译器必须知道它在处理什么。
无论如何,鉴于限制,我不确定如何执行此操作。在我看来,这只会让它变得不必要地更加困难。
【问题讨论】:
-
向您的讲师询问为什么带有指向指针的解决方案不适合。而你的
init(你或许应该称之为init_stack)可能会返回一个指针...... -
嗯,函数原型已经提供了——只剩下实现了。我看不到如何使用提供的版本来做到这一点。我同意你的看法——从 init 函数返回一个指针也很简单!但是不,我必须使用上面的函数原型提供实现 - 不知何故。
-
您可能会在
typedef struct mystack_st stackT并让您的struct mystack_st结构包含一个指针字段(可能还有一个长度和计数字段)。 -
不确定你的意思。结构中的指针字段会做什么?
-
它将指向一些包含堆栈内元素的
calloc-ed 数组。