C で抽象データ型 STACK を実装する割り当てがあります。データ型の性質上、メモリを割り当てる必要があるキー構造が必要です。私の問題は、今のところ、初期化関数がキー構造へのポインターを取得することをインストラクターが主張していることです。init() 関数は、構造体に必要なメモリを割り当て、フィールドをゼロに設定するだけですが、渡されるポインタにはそのメモリ位置を割り当てる必要があります。
関数にポインターを返すか、2 つ星のポインターを渡すことなく、これを行う方法は考えられません。どちらも許可されていません。関数プロトタイプは次のようにする必要があります (ここで、stackT* は主要な STACK データ構造へのポインターです)。
void init(stackT* stack);
私はこれを思いつきました、そしてそれはうまくいきます:
void init(stackT** stack){
*stack = (stackT*) malloc(sizeof(stack));
(*stack)->count = 0;
return;
}
しかし、それは割り当ての制限を順守しません。
tl;dr バージョン:
基本的に、STACK データ構造 (&stackPtr) への元のポインターのアドレスを、1 つ星のポインターを引数として取り、ポインター型の警告を受け取らない関数に渡すにはどうすればよいですか? さらに、引数を(stackT* stack)
以下のコードに変更すると、どちらの方法でも同じものを渡しているにもかかわらず、機能しません。これが私の問題です。
ポインターをポインターに渡す場合は、引数を2つ星のポインターにする必要があると思いました..コンパイラーは、ポインターを逆参照するときに何を扱っているかを知る必要があります。
いずれにせよ、制限があるため、これを行う方法がわかりません。私の意見では、これは不必要に難しくしているだけです。