| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 764 人关注过本帖
标题:求指针指导!!
只看楼主 加入收藏
wmdhxywd
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-11-16
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:6 
求指针指导!!
我刚学指针,还不太懂,希望各位大侠教教我。。
可以用什么样的声明将名为flagp的变量声明为指向布尔值的指针??*&x与x有什么区别??&*x与x又有什么区别??
搜索更多相关主题的帖子: 声明 布尔 
2011-11-28 08:50
jj369258
Rank: 4
等 级:业余侠客
帖 子:116
专家分:226
注 册:2010-12-2
收藏
得分:2 
flag一般是设为标志符号,若p=&a,则&*p=a; &*p=&(*p)=p
&*x把*x看为一个数,那么&*x跟&a就没什么区别了吧!
2011-11-28 11:31
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:2 
以下是引用jj369258在28/11/2011 11:31:49的发言:

flag一般是设为标志符号,若p=&a,则&*p=a; &*p=&(*p)=p
&*x把*x看为一个数,那么&*x跟&a就没什么区别了吧!

若p=&a,则&*p=a  ---->  p == &a ----> *p == *(&a)  ---->  &*p == &(*(&a)) ---> &*p == &a

这样才对吧。

而*(&p)才等于 p。



女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2011-11-28 11:44
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
名为flagp的变量声明为指向布尔值的指针??*&x与x有什么区别??&*x与x又有什么区别??

指向布尔值(其他基本类型也可以照这样的思路)的指针----指向该指针得到,也就是取该指针所指向的数据的类型是BOOL类型。

所以要得到这样类型的变量,就先指向它吧 ----》 *flagp .  这个不难吧

然后它的类型是BOOL类型的,所以就是这样:bool *flagp

然后加个分号:  bool *flagp;

如果声明后立即会对它进行赋值的操作可以不用初始化,否则请初始化它:bool *flagp = NULL;

LZ,当你要设计一个东西,但是有不知道怎么设计的时候,先给这个东西定个名字,
然后假设它已经是被设计出来的了, 然后你要用它, 然后开始最简单的层面开始分析它具有的属性,特征,作用等等。
然后把这些东西提取出来, 然后根据他们的逻辑关系逐一再融合回去。就可以设计框架了,也基本就可以设计出来了。

当然这个是思路,不是随便就容易做到,要多做熟练,要多练习。

举个例子:要定义一个  指向返回类型为bool接受两个bool类型参数的函数指针数组。

先给个名字: point;
首先应该很明白的知道我们定义的是一个数组,所以使用起来就是这样:point[]
然后数组的每个元素是个指针,所以要使用这个指针的数据就要这样:*(point[])
该指针的类型是函数指针,也就是说,取这个指针的数据,会得到一个函数,
这样我们就得到了一个函数的名字,也就是函数的地址,只不过现在函数名字是一个表达式:*(point[])。
现在可以调用一个函数了,怎么调用呢?给名字,给参数,就可以调用了:*(point[])(参数列表)
现在分析函数的参数列表:有两个, 第一个是bool,第二个是bool。所以就是:*(point[])(bool arg1, bool agr2)
函数都有返回值,这个函数的返回值是bool,所以就是:bool *(point[])(bool arg1, bool agr2)

然后再看看有什么问题没?
没有初值,所以给初始化,既然数组的元素的类型是函数指针,也就是指向函数的指针,那么只要赋值一个指向函数的指针就是了
而每个函数的名字就是这个函数自己的首地址,自己就是自己的指针,所以也可以直接赋值函数的名字。

一个我们自己定义或是库定义的函数名就是一个 函数常量
一个存放函数地址 (名字)   的指针就是一个 函数变量

这时如果有这样的两个函数,和一个函数指针:

bool  f1(bool b1, bool b2);
{
    return b1 && b2;
}
bool  f2(bool b3, bool b4)
{
    return !b3 && !b4;
}

bool (*pb)(bool arg1, bool agr2) = f2;

那么我们上面定义的数组就可以这样初始化:

bool *(point[])(bool arg1, bool agr2) = {b1, b2, *pb(也可以直接写pb,还是建议写*pb,至少让人一眼就能看出是个函数指针变量)};

好了,就说到这里吧。

PS,函数指针数组在搭建框架和包装函数上很有用哦。



现在有急事,还有2个下来再说,或是看其他人的回答吧



[ 本帖最后由 死了都要C 于 2011-11-28 12:19 编辑 ]

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2011-11-28 12:17
zy_space
Rank: 5Rank: 5
等 级:职业侠客
帖 子:163
专家分:364
注 册:2011-11-14
收藏
得分:2 
4L大侠,受教了

何必等待?梦在今朝
2011-11-28 14:50
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
收藏
得分:2 
理论:
&--取地址符(有很多叫法,不要太在意叫法了)
*--解引用符
对于变量而言,有两个属性,一个是变量的值,一个是变量的地址(内存).
内存是编过号的,在出厂时就已经定下来了.
p是指针,他的值是a的地址p也有地址. 用*p表示a的值.
a是变量,他的值是你赋给的值,a的地址是a的地址
实践:
程序代码:
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;
int main()
{
    int *p,a;
    a=0;
    p=&a;
    cout<<"p= "<<p<<endl
        <<"&*P="<<&*p<<endl
        <<"&a="<<&a<<endl
        <<"a= "<<a<<endl
        <<"*p="<<*p<<endl
        <<"&p="<<&p<<endl;
    return 0;
}
只要知道变量有两个属性.那么&*&*&*&*&*&*&*&*&*&*&*&*p你的会求了.无非是值和地址的转换.

能力 技巧
2011-11-28 15:55
CPTcpt
Rank: 2
等 级:论坛游民
帖 子:18
专家分:38
注 册:2011-11-20
收藏
得分:2 
谢谢各位的指导。
2011-12-01 18:40
快速回复:求指针指导!!
数据加载中...
 
   



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

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