| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 555 人关注过本帖
标题:求助,被指向指针的指针弄迷糊了,下面的程序怎么也读不明白
只看楼主 加入收藏
suv121
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-4-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
求助,被指向指针的指针弄迷糊了,下面的程序怎么也读不明白
程序代码:
#include<stdio.h>

char x,y,z;
void assp(char **p,char pref);
  main()
{
  char *a,*b,*c,ta,tb,tc;
  printf("请输入三位男士的选择对象:\n");
  scanf("%c%c%c",&ta,&tb,&tc);
  getchar();
  assp(&a,ta);
  assp(&b,tb);
  assp(&c,tc);
  printf("请输入三位女士的选择对象:\n");
  scanf("%c%c%c",&x,&y,&z);
  if(*a=='a')printf("A is LUCKY\n");
  if(*b=='b')printf("B is LUCKY\n");
  if(*c=='c')printf("C is LUCKY\n");
} 
void assp(char **p,char pref)
{
    switch(pref)
    {
        case 'x':*p=&x;break;
        case 'y':*p=&y;break;
        case 'z':*p=&z;break;
    }
}
2014-06-18 17:06
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:4 
这个问题你完全可以不用指向指针的指针先写一遍,然后再回头看这段代码

指向指针的指针在必要的时候你可以看做是二维数组的数组名。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-06-18 20:30
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:4 
你在switch 中如果要把地址赋给你的指针,直接变量名就可以了,如果你把&加上是什么意思呢

我不是砖家,要努力成为砖家。
2014-06-18 20:49
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:4 

梦想拥有一台龙芯3A-4000
2014-06-18 22:02
rickyapollo
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2014-6-18
收藏
得分:4 
男士的选择存在ta tb tc里,然后assp将a男士的选择ta里所存储的女士的指针指向x,这样当x赋值的时候,a也就赋值了,那么这个程序的意思就是如果a男士选择了x女士,x女士也选择了a男士,就会输出lucky
2014-06-18 22:32
suv121
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-4-25
收藏
得分:0 
回复 2 楼 蚕头燕尾
谢谢你的回答,但是这涉及到双向选择的问题,如果不用指针真想不出别的解决办法来
2014-06-19 10:21
suv121
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-4-25
收藏
得分:0 
回复 3 楼 砖家的谎言
程序执行到scanf("%c%c%c",&x,&y,&z);时,指针*p指向x的地址,所以switch里是*p=&x;如果直接是**P=x,程序执行到assp时会陷入死循环
2014-06-19 10:37
suv121
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-4-25
收藏
得分:0 
回复 3 楼 砖家的谎言
程序中还有个问题不明白,assp里的形参在定义是分别是个二维指针和字符变量void assp(char **p,char pref),但是在调用时assp(&a,ta)怎么变成&a了,我的理解是&a是指针a的地址。但是**P和&a怎么也不等价啊。
2014-06-19 10:43
杨唐卫
Rank: 2
等 级:论坛游民
帖 子:24
专家分:23
注 册:2014-4-16
收藏
得分:4 
程序代码:
#include<stdio.h>
char x,y,z;
void assp(char **p,char pref);
  main()
{
  char *a,*b,*c,ta,tb,tc;
  printf("请输入三位男士的选择对象:\n");
  scanf("%c%c%c",&ta,&tb,&tc);
  printf("请输入三位女士的选择对象:\n");
  scanf("%c%c%c",&x,&y,&z);
  //getchar();
  assp(&a,ta);
  assp(&b,tb);

 assp(&c,tc);


 
  if(*a=='a')
      printf("A is LUCKY\n");
  if(*b=='b')
      printf("B is LUCKY\n");
  if(*c=='c')
      printf("C is LUCKY\n");
}
void assp(char **p,char pref)
{
    switch(pref)
    {
        case 'x':*p=&x;break;
        case 'y':*p=&y;break;
        case 'z':*p=&z;break;
    }
}
2014-06-19 23:31
快速回复:求助,被指向指针的指针弄迷糊了,下面的程序怎么也读不明白
数据加载中...
 
   



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

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