| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 790 人关注过本帖
标题:为什么用一级指针形参来接一级指针实参也会修改到实参~?
只看楼主 加入收藏
sainimu78
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2010-1-27
结帖率:100%
收藏
已结贴  问题点数:12 回复次数:4 
为什么用一级指针形参来接一级指针实参也会修改到实参~?
/*循环队*/

#define MAXLEN 10
typedef struct
{
int element[MAXLEN];
int front , rear;
}Queue;

enqueue(Queue **q)
{

int a,b=9;

if(((*q)->rear+1)%MAXLEN==(*q)->front)
  printf("the queue has been no space\n");
else
  {
  printf("input data : ");

  for(;;)
    {
    scanf("%d",&a);
    if(a==00)
      return;
    (*q)->rear=((*q)->rear+1)%MAXLEN ;
    (*q)->element[(*q)->rear]=a;

    b--;
    if(((*q)->rear+1)%MAXLEN==(*q)->front)
      break;
    }
  }
printf("\n");
}

outqueue(Queue **q)
{
int a;
if((*q)->front==(*q)->rear)
  printf("empty\n");
else
  {
  printf("how much do you want to delete ? : ");
  scanf("%d",&a);
  printf("delete : ");
  for(;a--;)
    {
    (*q)->front=((*q)->front+1)%MAXLEN;
    printf("%d ",(*q)->element[(*q)->front]);
    if((*q)->front==((*q)->rear+1)%MAXLEN)
      break;
    }
  printf(" !\n");
  }
}

print(Queue *q) /*实参形参都是一级的不是就不会修改到实参吗~?  */
{
int i;             /*可是在这 如果吧 i都换成q->front 运行就会出问题*/
printf("\n");
i=q->front;
for(i=(i+1)%MAXLEN;i%MAXLEN!=(q->rear+1)%MAXLEN;i=(i+1)%MAXLEN)
  {
  printf("%d ",q->element[i]);
  }                  printf("\npress any key to continue \n\n");getch();
}

/* 如果把这个print函数于上面那个替换 运行就会出问题
print(Queue *q)  
{            
printf("\n");
for(q->front=(q->front+1)%MAXLEN;q->front%MAXLEN!=(q->rear+1)%MAXLEN;q->front=(q->front+1)%MAXLEN)
  {
  printf("%d ",q->element[q->front]);
  }                  printf("\npress any key to continue \n\n");getch();
}
*/


main()
{
Queue *queue;
int a;
queue=(Queue*)malloc(sizeof(Queue));
queue->front=0;
queue->rear=0;
for(;;)
  {
  printf("press 1 to enter\npress 2 to outqueue\npress 3 to print\n");
  scanf("%d",&a);
  if(a==1)
    {enqueue(&queue); continue;}
  if(a==2)
    {outqueue(&queue);continue;}
  if(a==3)
    {print(queue);continue;}
  }
}

/*运行测试举例
输入 1 (入队)
输入 1回车 2回车 3回车 4回车 5回车 6回车 7回车 8回车 9回车 (回到主菜单)
输入 2 (出队)
输入 8 (出队8个元素)
输入 3 (打印队中有的元素) 显示 9
输入 1 (入队)  ---(如果用注释里的print函数 就会提示队满 !! )*/


[ 本帖最后由 sainimu78 于 2010-4-4 14:07 编辑 ]
搜索更多相关主题的帖子: 形参 指针 
2010-04-04 14:04
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:12 
因为他们指向的地方一样 你修改的是他们指向的内容  
2010-04-04 14:23
sainimu78
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2010-1-27
收藏
得分:0 
完蛋.. 原来我什么都不懂 都在瞎用啊...
我把其它两个函数形参都改成1级指针 . 运行也没问题 ..蒙了
2010-04-04 15:09
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
他们传递的是地址啊,实参和形参都指向同一地址,所以形参的内容该了,实参也就改变了
2010-04-06 22:12
赤那
Rank: 3Rank: 3
来 自:广东
等 级:论坛游侠
威 望:1
帖 子:127
专家分:178
注 册:2010-3-1
收藏
得分:0 
指针与普通变量不同,普通变量作参数时,是将实参复制过去,而指针直接指向实参
2010-04-06 23:20
快速回复:为什么用一级指针形参来接一级指针实参也会修改到实参~?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013708 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved