| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 23421 人关注过本帖, 12 人收藏
标题:[原创] 三言两语,妙说《指针》。
只看楼主 加入收藏
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
结帖率:100%
收藏(12)
 问题点数:0 回复次数:140 
[原创] 三言两语,妙说《指针》。
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: hackerjiang E-mail:hackerjiang@qq.com QQ:298218699
*/ 时间: 2007-8-6 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


看了前面仁兄写的“指针其实就这么简单”,我的手就痒痒了,呵呵。我也来现丑!

首先,因为是“三言两语”,所以那些“指针是C语言的灵魂”的废话我就不多说了,呵呵。

前言:如果想简单一点,只看彩色即可,黑色一般是扩充,感兴趣的朋友可以看一看。

入正题:

指针是什么?——指针是一种数据类型


形象的说,大家都知道“邮箱”与“邮箱里的信件”的关系吧!其实就是“地址”(指针)与“地址的内容”(指针指向的内容)的关系!

如图:(耐烦的看,不耐烦的跳过)


图片附件: 游客没有浏览图片的权限,请 登录注册
(自己画的,有点粗糙,别怪我。)
图中描述了6个内存单元,它们的编号分别是从1000到1005的6个值,其中编号1000到1005就是相应的内存单元的地址。
数据存放在地址所标识的内存单元中。地址1000到1005多对应的内存单元就是用来存放数据的。

继续:把内存单元想像成一个个“邮箱”,而内存单元的数据就好比是“邮箱中的信件”,内存单元的编号(地址)就好比是“邮箱的编号”。

(插一小段,耐烦的看,不耐烦的跳过:如果在程序中定义一个变量,那么编译是系统就会为变量分配一定数量的内存单元。一般系统会为字符型的变量分配1个字节的储存空间,为整型变量分配2个字节的储存空间,浮点型的4个字节)

总结:1`地址起到一个指向作用。2`地址中还隐含有这个变量的类型信息。

其实,“指针”就是“地址”。通过“指针”可以找到以它为地址的内存单元。一个变量的地址称为该变量的指针。

超级大推理:
——中心:一个变量的地址(指针)也是一个值。
→专门用来存放变量地址的变量,称为“指针变量”。
→所以“指针变量”的值是“指针”(一个变量的地址)。

指针的运算:指针就地址。C语言中的地址是无符整数。

对于指针变量,允许的主要运算有:1`指针变量的赋值。2`指针与整数之间的加减运算。3`指针之间的比较。4`指针之间的加减运算。

呵呵```不知写得好不好。如果大家支持,我将写续集,下一集应该是写“指针与一维数组”吧。呵呵```


附:回帖是一种美德。向回帖的同志致敬!







[此贴子已经被作者于2007-8-6 21:57:20编辑过]

搜索更多相关主题的帖子: 指针 
2007-08-06 21:56
leeldy
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-8-2
收藏
得分:0 
指针是好理解,但是太灵活,运用才是真正的难点和重点~~~

↑↑↑↑↑↑↑↑如果我错了,请改正我的错误↑↑↑↑↑↑↑↑

2007-08-06 22:00
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 
以下是引用leeldy在2007-8-6 22:00:04的发言:
指针是好理解,但是太灵活,运用才是真正的难点和重点~~~

说的对!指针要用好挺不简单的。


2007-08-06 22:03
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:0 
以下是引用leeldy在2007-8-6 22:00:04的发言:
指针是好理解,但是太灵活,运用才是真正的难点和重点~~~

在接下来的帖子里自然有关于介绍灵活运用的地方,这篇只是介绍,给新手打个基础。


(づ ̄ 3 ̄)づ
2007-08-06 22:06
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 

大概看了下

个人认为.. 指针和地址还是没分清楚..

不怎么赞同!


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-08-06 22:51
luo123
Rank: 1
等 级:新手上路
威 望:2
帖 子:324
专家分:0
注 册:2007-4-13
收藏
得分:0 
辛苦了,

[url=http://www..cn]电子编程[/url]
2007-08-07 00:00
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

指针不是地址,指什变量的值是一个地址.

或许如下的代码能帮助理解这个问题

[QUOTE]/*TC 2.0*/
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=0,p=1,q=45;
printf("i=&p ,%d %p %d\n",i,(int *)i,*(int *)i);
i=&p;
printf("i=&p ,%d %p %d\n",i,(int *)i,*(int *)i);
i=&q;
printf("i=&q ,%d %p %d\n",i,(int *)i,*(int *)i);
printf("%d,%d",sizeof(int),sizeof(int *));
getch();
return;
}[/QUOTE]


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-08-07 08:31
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
第一行的,
printf("i=&p

printf("i

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-08-07 08:33
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
4`指针之间的加减运算。


指针之间的加运算没有意义


Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-08-07 09:28
星星鱼虾蟹
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-6-2
收藏
得分:0 
讲得好复杂啊,感觉可以再简单点

2007-08-07 09:28
快速回复:[原创] 三言两语,妙说《指针》。
数据加载中...
 
   



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

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