0

本を読んで独学で C を学んでいます。現在、bitArray を使用して、特定の数の下にある素数の数を見つけようとしています。デフォルトとして、本は私に構造体を与え、関数は次で始まります:

typedef struct _seg {
   int  bits[256];
   struct _seg *next, *prev;
} seg;

*seg whichseg(int j){

}

ただし、この関数*seg whichseg(int j){はコンパイル時にエラーをスローします。seg *私はそれがセグの後にスターであるべきだと思っていますか?そして、この関数は正確にはどういう意味ですか? j を自動的に seg 構造体にしていますか?

皆さん、ありがとうございました :-)

4

3 に答える 3

1

seg ie の後に * を付ける必要がありますseg*

今のところ、あなたの関数は何もしていません.

ノードに j 値を入れたいと仮定しています。ゼロの位置にビット配列を入れています。

seg* whichseg(int j){
       seg* segNode = malloc(sizeof(seg));
       seg->bits[0]=j;
       return seg;
}
于 2013-09-22T04:41:51.863 に答える
0
seg* whichseg(int j){

}

これは、関数が struct _seg へのポインターを返すことを意味します。

于 2013-09-22T04:49:49.883 に答える
-3

この質問をありがとう。次のように、コードを少し変更しました。

typedef struct _seg {
   int          bits[256];
   struct _seg *prev;
   struct _seg *next;
} seg;

seg * whichseg(int j)
{
   seg *this;

   this = malloc(sizeof(seg));

   this->prev = this->next = NULL;

   this->bit = //your computation here

   // the code that called whichseg must free the seg
   // structured that was malloc'd in whichseg!!
   return this;

}

まず、アンダースコアを使用しても問題ありません。このコンパイル単位での使用は、問題を引き起こしません (または引き起こすべきではありません)。通常、「_names」はプライベート変数またはメソッドですが、実際にはショップの基準に依存します。

segwhichseg は、ヒープに割り当てられた構造体へのポインターを返す単なる関数です。コードは、プログラムの実行中に割り当てられたが解放されないメモリを担当します。プログラムが完了すると、すべてのリークが修復されます (少なくとも Windows では?)。

お役に立てれば。

于 2013-09-22T05:28:08.317 に答える