0

これまでのところ、次のコードがあります。複数のステートメントで明示的な初期化を行うことができると確信していますが、単一のステートメントでそれを行う方法を学びたいです。

#include <stdio.h>
#include <stdlib.h>
#define LUNCHES 5

int main(void)
{
    struct Food
    {
        char *n;  /* “n” attribute of food */
        int w, c; /* “w” and “c” attributes of food */
    }

    lunch[LUNCHES], 
    lunch[0] = {"apple pie", 4, 100}, 
    lunch[1] = {"salsa", 2, 80};
}

私は次のことがうまくいくと思っていますが、それは別の声明です。

 int main(void)
 {
     struct Food
     {
         char *n;  /* “n” attribute of food */
         int w, c; /* “w” and “c” attributes of food */
     }

     lunch[LUNCHES];
     lunch[0] = {"apple pie", 4, 100};
     lunch[1] = {"salsa", 2, 80};
4

4 に答える 4

3

あなたはもうすぐそこにいます:

 = { [0] = {"apple pie", 4, 100}, [1] = {"salsa", 2, 80} }

配列の初期化になります。

これは、コンパイラが C99 に付属の「指定された」イニシャライザをサポートしている場合のみです。

それ以外は

 = { {"apple pie", 4, 100}, {"salsa", 2, 80} }

もするでしょう。

于 2012-11-12T18:57:11.913 に答える
2

試す:

struct { ... } lunch[LUNCHES] = {{"apple pie", 4,100}, {"salsa",2,80}};
于 2012-11-12T18:57:42.380 に答える
2

このように定義できます

int main(void)
{
    struct Food
    {
        char *n;                                                            /* “n” attribute of food */
        int w, c;                                                  /* “w” and “c” attributes of food */
    }lunch[LUNCHES] = { {"apple pie", 4, 100}, {"salsa", 2, 80}};
}
于 2012-11-12T18:57:46.000 に答える
1

もしかしてこういうこと?

#include <stdio.h>
#include <stdlib.h>

#define LUNCHES 5

struct Food {
   char *n;   /* “n” attribute of food */
   int w, c;  /* “w” and “c” attributes of food */
} lunch[LUNCHES] = {
    {"apple pie", 4, 100}, 
    {"salsa", 2, 80}
};

int 
main(void)
{
  printf ("lunches[0].n= %s\n", lunches[0].n);
  return 0;
}
于 2012-11-12T18:59:39.987 に答える