2016-04-17 21 views
0

我的代码是关于实现堆栈和队列的功能。如果你想知道为什么我不在程序中使用struct,这是因为我们的教师只允许我们使用指针,并且我使用指针有点困惑。它还没有完成,尽可能多地尝试一次完成一个功能,而不是跳到下一个功能。如何使用C中的指针增加一个变量?

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

据我了解我的功能插件的这一部分,“LEN”是假设改变,因为它的每递增一次的功能是使用

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"); 
} 

这部分询问用户是否添加容器中的内容或只是将其删除。他们一次只能添加或删除一个。

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时,它仍然是0而不是1。

 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。这意味着如果您拨打insert(...)并将本地变量len作为参数main(...)或无论如何 - 它实际上将局部变量len的值复制到insert(...)函数内的参数变量len。然后在insert(...)函数中的变量len对插入函数是本地的。即使您声明名为incre的指针指向此insert(...)-本地变量len,也不会改变。

然后参数变量len递增 - 但由于它是insert(...)函数的局部变量,你会看不出原来的局部变量len(这是main(...)例如)被改变。

如果你想通过引用而不是按值传递原始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

我们在这里讨论两个不同的'len's。 insert(...)'函数中的一个(它是“insert(...)”的参数,以及在调用函数时作为参数传递给insert(...)的那个函数。'insert(...)'中的局部参数变量不会被修改,你在调用函数时通过的变量不会被修改,如果你阅读C++指南的一部分来解释通过引用并传递如果你不完全理解为什么会发生这种情况,我希望我至少可以澄清*这是发生的。:) – mxscho

+0

非常感谢。 :) – Newbie