0
#include <stdio.h>
#include <stdlib.h>
main()
{
    typedef struct
    {
        int info;
        struct strc* next_ptr;
    }strc;
    strc* strcVar[5];
    strcVar = malloc(sizeof(strc) * 5);
    strcVar[0]->info = 1;
    printf(" All is well ");
}
4

6 に答える 6

2

変化する

 strc* strcVar[5];

 strc* strcVar;
 strcVar = malloc(sizeof(strc) * 5);
 strcVar[0].info = 1;

また

変化する

strc* strcVar[5];
strcVar = malloc(sizeof(strc) * 5);
strcVar[0]->info = 1;

strc strcVar[5];
strcVar[0].info = 1;
于 2013-02-12T13:37:45.920 に答える
2

strcVarは (ローカル) 配列名であるため、ポインターを割り当てることはできません。あなたはおそらく望んでいた:

 strc* strcVar;
 ... /* and  later */
 strcVar[0].info = 1;

へのポインターの配列が必要な場合は、struct strcVaughn Cato の回答が役立ちます。

于 2013-02-12T13:34:44.020 に答える
2

この行は間違っていて不必要です:

strcVar = malloc(sizeof(strc) * 5);

代わりに、次を使用できます。

{
  int i=0;
  for (;i!=5; ++i) {
    strcVar[i] = malloc(sizeof(strc));
  }
}
于 2013-02-12T13:34:44.357 に答える
2

から配列を割り当てることはできませんmalloc-それはどちらかです。5 つのポインターの配列を宣言した場合、それらのメモリは既に割り当てられています。を使用する必要がある場合mallocは、配列の代わりにポインタへのポインタを使用してください。mallocそれ以外の場合は、個々の項目を配列ではなくで割り当てます。

strc* strcVar[5];
strcVar[0] = malloc(sizeof(strc));
于 2013-02-12T13:35:11.613 に答える
1

修正コード:

#include<stdio.h>
#include<stdlib.h>
void main()
{
    typedef struct
    {
        int info;
        struct strc* next_ptr;
    }strc;
    strc* strcVar;
    strcVar = malloc(sizeof(strc) * 5);
    strcVar[0].info = 1;
    printf(" All is well ");
}
于 2013-02-12T13:37:31.253 に答える
0

どの配列でも、ベース アドレスは const ポインターです。変更することはできません。

int a[5]; があるとします。

ここで、a は配列全体への基本ポインターであり、変更することはできません。

これはすべてのアレイに適用されます。

于 2013-02-12T15:37:55.633 に答える