0
struct node
{
int info;
struct node *link;
}*start;
void main()
{
struct node*tmp,*q;
tmp=(struct node*)malloc sizeof(struct node);
}

私の最初の質問は、構造体を宣言するとき、構造体型ノードがメモリ内に作成されるかどうかです。

2番目の質問は、はいの場合、ここで構造体型ノードを指している開始ポインターを取るので、構造体ノードのアドレスを指定せずにポインターを開始します宣言中に作成された構造体型ノードを指す開始ポインター方法plzはこれを内部的にどのようにクリアしますかこれが起こっている私はそれについて多くの混乱を持っています

3 番目の質問は、最初は tmp であり、q ポインター変数はすべて同じ構造体ノードを指しています。

plzは、mallocとcallocの概念を説明して、私を助けるためにノードthxを内部的に作成する方法を説明します

4

1 に答える 1

2
  1. 変数を宣言せずに構造体型を宣言できます。ただし、コードではポインター変数start.

  2. 変数startは 0 に初期化されているため、何も指していません。

  3. 変数tmpqはまったく初期化されず、値が割り当てられるまで安全に使用できません。tmp次の行で初期化します。qまだ初期化されていません。

  4. malloc()ポインターが指すスペースを提供します。そのスペースは初期化されません。の値tmp->infoは不定です。の値tmp->linkも不定です。を使用した場合calloc()tmp->infoはゼロになりtmp->link、null になります (すべての実用的なシステム — 理論的にtmp->linkは、適切に初期化されていないシステムが存在する可能性があります)。

void main()最後に、悪いことに注意してください。C 標準では、 の戻り値の型は であるmain()必要があると規定されていますint。さらに、C99 以降のコンパイラを使用している場合を除きreturn(0);、最後の行として、または同等のものを含める必要がありますmain()— またはexit().

于 2012-09-10T06:40:30.133 に答える