| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5251 人关注过本帖, 12 人收藏
标题:关于理解复杂指针声明及定义的看法。
只看楼主 加入收藏
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1934
专家分:3012
注 册:2009-12-22
收藏
得分:10 
全是指针,我还没学到那一章呢。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2012-07-23 09:18
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 8楼 beyondyf
const int* p; 从标示符开始,p的右边已经没有类型了,左边发现了*,则p是一个指针,然后在左边发现了int,则它指向的类型是int,最后在左边发现了const,则p指向的这个int是只读的。p就是一个指向只读变量或常量的指针(Pointer to constant)。

int const* p; 从标示符开始,p的右边已经没有类型了,左边发现了*,则p是一个指针,然后在左边发现了const,则它指向的数据是只读的,最后在左边发现int,则它指向的这个只读数据的类型是int。所以这个p跟上面的p一样也是一个指向只读变量或常量的指针。

const int* const p; 从标示符开始,p的右边已经没有类型了,左边发现了const,则p是一个只读变量,然后在左边发现*,则p是一个指针(但它只能指向一个地方),然后在左边发现int,则它指向的数据的类型是int,最后在左边发现const,则它指向的是一个只读int或一个int常量。

int const* const p; 和上面的一样,const如果在*的左边,则代表这个指针指向一个不可改变的对象,在*号的右边则代表这个变量它自己是只读的。

My life is brilliant
2012-07-23 11:02
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
以下是引用lz1091914999在2012-7-23 11:02:23的发言:

const int* p; 从标示符开始,p的右边已经没有类型了,左边发现了*,则p是一个指针,然后在左边发现了int,则它指向的类型是int,最后在左边发现了const,则p指向的这个int是只读的。p就是一个指向只读变量或常量的指针(Pointer to constant)。

int const* p; 从标示符开始,p的右边已经没有类型了,左边发现了*,则p是一个指针,然后在左边发现了const,则它指向的数据是只读的,最后在左边发现int,则它指向的这个只读数据的类型是int。所以这个p跟上面的p一样也是一个指向只读变量或常量的指针。

const int* const p; 从标示符开始,p的右边已经没有类型了,左边发现了const,则p是一个只读变量,然后在左边发现*,则p是一个指针(但它只能指向一个地方),然后在左边发现int,则它指向的数据的类型是int,最后在左边发现const,则它指向的是一个只读int或一个int常量。

int const* const p; 和上面的一样,const如果在*的左边,则代表这个指针指向一个不可改变的对象,在*号的右边则代表这个变量它自己是只读的。


你还真解释
2012-07-23 11:30
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:10 
谢谢楼主,提供这么一个学习讨论贴子!

3楼的表述很清晰,我也认同。

我来做点细化工作吧(只是我的理解,不知对不对?):
int*(*(*(*p)[10])(int))(int,int);
*p                                        p是一个指针变量。
(*p)[10]                                指向一个有10个元素的数组。
*(*p)[10]                                这10个元素都是指针。
(*(*p)[10])(int)                        这10个元素中的指针都指向函数,该函数接收一个int参数。
*(*(*p)[10])(int)                        函数返回int指针
(*(*(*p)[10])(int))(int,int)            函数返回指针指向另一函数,该函数接收两个int参数
int*(*(*(*p)[10])(int))(int,int)         函数返回int指针

只要认真学习楼主提供的关于指针的解读,再来分析楼主最后布置的作业是不难的!
感觉楼主象是在上一堂课,一个很有新意的网上课堂。

烦请楼主看看我的作业,看看我的理解对不对?

做自己喜欢的事!
2012-07-24 09:50
duyisu
Rank: 2
等 级:论坛游民
帖 子:1
专家分:10
注 册:2012-7-24
收藏
得分:10 
完全同意三楼的说法!
2012-07-24 10:16
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
以下是引用netlin在2012-7-24 09:50:29的发言:

谢谢楼主,提供这么一个学习讨论贴子!

3楼的表述很清晰,我也认同。

我来做点细化工作吧(只是我的理解,不知对不对?):
int*(*(*(*p)[10])(int))(int,int);
*p                                        p是一个指针变量。
(*p)[10]                                指向一个有10个元素的数组。
*(*p)[10]                                这10个元素都是指针。
(*(*p)[10])(int)                        这10个元素中的指针都指向函数,该函数接收一个int参数。
*(*(*p)[10])(int)                        函数返回int指针
(*(*(*p)[10])(int))(int,int)            函数返回指针指向另一函数,该函数接收两个int参数
int*(*(*(*p)[10])(int))(int,int)         函数返回int指针

只要认真学习楼主提供的关于指针的解读,再来分析楼主最后布置的作业是不难的!
感觉楼主象是在上一堂课,一个很有新意的网上课堂。

烦请楼主看看我的作业,看看我的理解对不对?
*(*(*p)[10])(int)                        函数返回一个指针
这里还不知道返回指针的类型。

My life is brilliant
2012-07-24 11:09
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 3楼 obstratiker
恩,正确。

My life is brilliant
2012-07-24 11:09
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 7楼 小习小习
你也正确 。

My life is brilliant
2012-07-24 11:10
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
无意中看到这个帖子,竟然沉在下面,也太糟践好东西了。
顶起,如果哪位看到觉得好就接着顶

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-22 23:01
wzh9527
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-1-25
收藏
得分:0 
充个数
2013-01-25 22:42
快速回复:关于理解复杂指针声明及定义的看法。
数据加载中...
 
   



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

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