2016-04-17 11 views
0

私のコードはStackとQueueの機能を実装することです。なぜ私のプログラムで構造体を使用しないのかと疑問に思っているのは、インストラクターが私たちにポインタを使用させてくれるだけなので、ポインタを使って少し混乱しているからです。それはまだ完了していない、可能な限り、次のものにスキップするのではなく、一度に1つの機能を終了しようとする。どのようにCでポインタを使って変数をインクリメントしますか?

#include <stdio.h> 
int container[5]; 
int len=0; 

私はそれが機能は、この部分は、追加するかどうかをユーザーに尋ねる

int insert(int container[],int len) 
{ 

    int i,j,content,*incre; 
    incre=&len; 

    for(i=*incre;i<*incre+1;i++) 
    { 
     printf("Enter number:\n"); 
     scanf("%d",&content); 

     container[i]=content; 
    } 
    (*incre)++; 

} 

int printcontent(int container[]) 
{ 
    int i; 
    printf("Content of container:\n"); 

    for(i=0;i<len+1;i++) 
    { 
     printf("%d ",container[i]); 
    } 

    printf("\n"); 
} 

を使用されるたびにインクリメントなので、私の関数insertで、「LEN」のこの部分は変更することが想定されて理解したようコンテナ内のコンテンツを削除するか、単純に削除します。それらは、一度に1つだけ追加または削除することができます。

int stack(int container[]) 
{ 
    while(1) 
    { 
     int choice; 

     printf("What do you wanna do?\n"); 
     printf("1.Insert\n2.Pop\n3.isEmpty\n4.Exit\n"); 
     scanf("%d", &choice); 

lenの値をチェックしたところ、最初にinsertを使用したときは1の代わりに0のままです。

 if (choice==1) 
     { 
      insert(container,len); 
      printf("Value of len:%d\n",len); 
      printcontent(container); 

     } 
     else if(choice==4) 
     { 
      break; 
     } 


    } 


} 

main() 
{ 
    while(1) 
    { 
     int choice; 


     printf("What do you want to do?\n"); 
     printf("1.Stack\n2.Queue\n3.Exit\n"); 
     scanf("%d",&choice); 

     if(choice==1) 
     {. 
      stack(container); 
     } 
     else if(choice==3) 
     { 
      break; 
     } 

    } 

} 

ご協力いただきありがとうございます。

+0

ごめんなさい - 私は誤解まずあなたの質問。私の答えは実際にあなたに役立つかもしれないものを与えるために編集しました。 :) – mxscho

答えて

0

insert(...)の機能は、パラメータ値がint lenであることを前提としています。つまり、ローカル変数lenを引数としてinsert(...)を呼び出してmain(...)またはwhereeverにコールすると、ローカル変数lenの値が実際に insert(...)関数内の引数変数にコピーされます。 insert(...)関数の内部にある変数lenは、挿入関数に対してローカルです。 increというポインタがinsert(...) -local変数lenを指していると宣言しても、それは変わりません。

はその後 len変数の引数がインクリメントされる - しかし、原因、それはあなたが変更されている(例えば main(...)である)、元のローカル変数 lenは表示されません insert(...)関数のローカル変数であるという事実に。あなたが参照して代わりの値によって、元の lenを渡したい場合は、このようなあなたの関数を宣言する必要が

...

int insert(int container[], int* len) { ... } // Using raw pointers 

...または、このような...

int insert(int container[], int& len) { ... } // Using references 

...と(上記の判断に依存する)そのようにそれを使用します。

insert(container, &len); // With pointers 
insert(container, len); // With references 
+0

ここでは、2つの異なる「len」について言及しています。 'insert(...)'の関数の中にあるもの( 'insert(...) 'のパラメータ)と、関数を呼び出すときに' insert(...)'の引数として渡しているもの'insert(...)'の中のローカル引数の変数は変更されます。関数を呼び出すときに渡された変数は参照渡しを説明するC++ガイドの部分を読んで助けてくれるかもしれませんなぜこのようなことが起こっているのか完全に理解できない場合には、価値ある意味論があります。私は、少なくともこれが起こっていることを明確にすることができれば幸いです: – mxscho

+0

ありがとうございました。 :) – Newbie

関連する問題