質問: end ==>"); scanf("%d",&n); if(n==1){/*エンキューをします*/ printf(" Enter enQ data ==>"); scanf("%d",&m); r=enq(m); printf("Queue :"); for(i=0;i=QLEN){ return QFUL; } else { a[j]=data; return 0; } j++; } /* キューが満杯ならQFULをreturn*/ /* そうでないならキューの最後尾にdataを追加 */ //} //int deq(void){ /* キューが空ならQEMPをreturn*/ /* そうでないならキューの最前列のdataを変数に入れ */ /* 後続のデータを一つづつ前に移動させ、変数の値をリターンする */ //}
回答: > > 引数がvoidでもデータを受けとり、キューの中身を表示できるものなのでしょうか? > > > 結論から言うと、できます。が、このままではできません。 順に説明すると、main関数の前に、変数の定義がありますよね? これはグローバル変数と呼ばれ、どの関数からでもアクセスできます。これに対して、各関数内のみで利用できる変数を自動変数と言います。さて、main関数と他のいくつかの関数で、「同じ名前の自動変数」が定義されていますが、コンパイルエラーにはならないのでしょうか? 結論から言うと、コンパイルエラー「には」なりません。これは「この関数でこの名前は、グローバル変数ではなく、この自動変数を意味するから」という指示です。つまり、関数の中で別の変数を用意して、それを同じ名前で呼ぶことにしたのです。この場合、Cではグローバル変数のほうにアクセスする手段がありません。 要するにこのコードの問題点は、各関数が好き勝手にキューを用意して、お互いを無視して操作しようとしている点なのです。