| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2548 人关注过本帖, 1 人收藏
标题:基本概念的理解:指针和指针变量的区别,到底有木有,请大神指教
只看楼主 加入收藏
赤血之魂
Rank: 2
等 级:论坛游民
帖 子:109
专家分:86
注 册:2012-3-22
结帖率:55.56%
收藏(1)
已结贴  问题点数:20 回复次数:39 
基本概念的理解:指针和指针变量的区别,到底有木有,请大神指教
这里抛出问题,希望有大神能够以示例说话,标出出处。

我在这里引出一下问题:
指针和指针变量是一样的东西吗? 如果指针和指针变量不同, 那么, 他们不同在何处呢?

为了研究此问题, 我找来了三本书分别是C语言的经典著作谭浩强老师的《C程序设计第四版》,Kenneth A.Reek的《C 和指针》以及Stephen Prata的《C Primer Plus(第五版)中文版》以及对应的英文版。

在谭老师的书上有这样的字眼 第289页“首先要准确地弄清指针的含义。指针就是地址,”此句是用粗黑体强调的。此句的含义是,指针是地址,而地址是常量。那么指针就是一个常量。在下一段中有这样的一句话:“地址就是地址,本身就是一个值。”更加强调了指针就是一个常量的说法。指针变量呢?在谭老师的书中,指针变量就是盛放指针的变量,即盛放地址的变量。同样是289页上面的第二段就是说明的这一问题。

在《C Primer Plus(第五版)中文版》中第236页中9.7 指针简介 里面有这样一句话“一般来讲,指针是一个其数值为地址的变量(或更一般地说是一个数据对象)。”那么此句的含义是指针是一个变量。
为了防止是由于翻译出错导致理解失误, 我专门弄来了C Primer Plus的英文版。
图片附件: 游客没有浏览图片的权限,请 登录注册
原文“Pointers? What are they? Basically, a pointer is a variable (or, more generally, a data object) whose value is a memory address. Just as a char variable has a character as a value and an int variable has an integer as a value, the pointer variable has an address as a value. Pointers have many uses in C; in this chapter, you'll see how and why they are used as function parameters.”这里的翻译应该没有什么问题。

就上面的两本书来说,谭老师的看法是:指针非变量,指针是地址,指针变量是盛放指针的变量,也就是说, 指针变量是盛放地址的变量。很明显,指针不同于指针变量,他们的关系是,指针变量是盛放指针的变量。
Stephen Prata先生则认为:指针就是变量,而,指针变量等价于指针,这样的指针所盛放的值才是地址。

在《C和指针》当中并没有深深的阐释“指针”以及“指针变量”的区别。

现在,我对上面的两本IT著作的说法并没有搞清楚,不知道它们为什么如此矛盾, 也可能是我理解有误,但是, 我很想知道权威的说法是什么。很想知道原汁原味的概念,可能大神们会认为在下是在咬小字眼, 可是咱们搞研究的怎能不咬一下小字眼呢? 该理解的概念一定要理解的清楚一些。这样才对得起“学习”二字。

编程论坛是一个很权威,很有档次的论坛,在这里发言的人们都是很有档次,很有素质的。 我希望大家能在帖子上说出一点有意义的东西,不要在帖子中恶意灌水,谢谢您的理解。

[ 本帖最后由 赤血之魂 于 2013-3-17 14:41 编辑 ]
搜索更多相关主题的帖子: 英文版 Stephen C程序设计 
2013-03-17 14:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
指针是一个变量,它的值就是所指向的对象的内存地址。不要以为指针不是变量,它也是变量,要占用一个变量(通常是int型的尺寸)的内存。所谓通过指针寻访数据,是计算机先读出指针的值,然后根据这个值再转移到指定内存处读出那里的数据,这是一种间接寻访手段。上面所有资料的说法是一致的。

[ 本帖最后由 TonyDeng 于 2013-3-17 14:59 编辑 ]

授人以渔,不授人以鱼。
2013-03-17 14:48
信箱有效
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
收藏
得分:2 
一点也不懂  跟贴学习。
2013-03-17 14:55
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:2 
如同
i = 100;
while(i--) {}
前面的必须是常量。而i--则i必须是变量,而不能100--

仰望星空...........不忘初心!
2013-03-17 14:57
waja
Rank: 2
等 级:论坛游民
帖 子:53
专家分:52
注 册:2012-7-27
收藏
得分:2 
指针变量就是指针,指针的值是地址。
2013-03-17 14:57
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
指针变量是一个变量,指针指向的是常量..

仰望星空...........不忘初心!
2013-03-17 14:58
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:2 
指针和指针变量是一样的东西吗? 如果指针和指针变量不同, 那么, 他们不同在何处呢?
//////////
指针是一个概念,是一种数据类型;指针变量是一个实际存在符合指针概念的物体;你无法用C语言来表达指针,只能表达指针变量;
如同你无法用C语言来表达int,但能表达一个int 变量;

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-17 15:05
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用Susake在2013-3-17 14:58:54的发言:

指针变量是一个变量,指针指向的是常量..
可以指个来看看

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-17 15:06
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
“一般来讲,指针是一个其数值为地址的变量(或更一般地说是一个数据对象)。”
====>如把int也套用这句话是不是有助理解?
“一般来讲,整数是一个其数值为整数的变量(或更一般地说是一个数据对象)。”

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-17 15:17
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:2 
指针只是一种类型,用*表示,指针变量是一个标识,如int *pInt,指声明一个指针变量pInt,它可以指向一个整型的数据。
如果int a=8;pInt=&a;则是让指针变量pInt指向a,在pInt中保存了a的地址。在输出*pInt时是a的值,输出pInt时是a的地址。
2013-03-17 15:56
快速回复:基本概念的理解:指针和指针变量的区别,到底有木有,请大神指教
数据加载中...
 
   



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

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