ここに私が何をしているのかの例があります。この最初のコードは機能しません。この割り当てが関数外で動作しないのはなぜですか?
typedef struct {
char *desc;
unsigned quantity;
} item;
item *inventory[INVENTORY_SIZE];
item thing = { "This is a thing.", 2 };
inventory[0] = &thing; // Fail.
int main(void){
// Code goes here.
}
ただし、次のコードは機能します。
typedef struct {
char *desc;
unsigned quantity;
} item;
item *inventory[INVENTORY_SIZE];
item thing = { "This is a thing.", 2 };
int main(void){
inventory[0] = &thing; // Works.
}
私は関数の外で関数を呼び出すことはできませんが、関数の外にグローバルを割り当てることができます。これは割り当てのように見えます。だからなぜそれは機能しないのですか?
編集:私が「投稿」をクリックするとすぐに、私は答えを実現したと思う。関数の外の宣言で値を代入することはできますが、それが宣言である場合に限ります。それは答えですね。
*割り当て*と*初期化*の違いを誤解していると思います。あなたのものは元のものです。それはあなたがやっていることをやっているところであれば後者になることができます。あなたが望むことを実行することは可能ですが、初期化としてのみ、いくつかのコードを再配置し、ポインタ配列に初期化シーケンスを与える必要があります。 – WhozCraig
あなたの編集を(私の答えと併せて読まれると) "関数の外の宣言で値を代入"しないで、その宣言の一部としてオブジェクトを初期化します。あなたはそれがアサインメントのように見えることは間違いありませんが、それが* :-)ではないというぎりぎりの事実を除いて – paxdiablo