| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1169 人关注过本帖
标题:C语言 指针变量部分好难理解,求高手指导下怎么学,这部分用处大吗
只看楼主 加入收藏
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 10楼 young
谢谢!学习了,c强制类型转换功能这么强大,那指针操作就更灵活了。

能编个毛线衣吗?
2015-01-30 21:08
shixin7216
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2012-7-18
收藏
得分:1 
回复 楼主 LCDW
以下是我在一个论坛上看的,希望对你有帮助:
指针对一部分初学者来说一直是一个无法逾越的障碍,没有指针的C语言就好像没有左腿的短跑运动员。今天我来试试换一种方法来理解指针,希望能帮还在为指针挣扎的朋友们理清思路,高手略过即可。
    我们先认为内存是一家客栈(看起来这和老掉牙的大楼的比喻没什么区别,但是请你耐心看下去)。
同大部分的客栈一样,这家客栈有天、地、人等各种档次的房间,用现在的话就是单人间、双人间、四人间等等。来住店的客人也是车水马龙,三教九流都有,我们看看都有哪些人:
    快乐单身汉char,还有char的小弟unsigned char,他们只住单人间;
    short int, unsigned short int都是已婚无孩,他们只住二人间;
    int, unsigned int, long int, unsigned long int,这些都是四口之家,当然住四人间了;说起来这里面的前两位,int和 unsigned char,在dos时代还是二人世界,住二人间,后来出了32位系统后,他们才成为四口之家,等到了64位时代,他们中有人会变成8口之家。人口变化太快,所以人口问题就不讨论了,只要知道有几口人(几个字节)就住几人间就行了。
    另外还有一些更庞大的家庭double,float我们就不一一赘述了。
    住客栈是要登记的,至少老板要知道哪个房间没人住,好租给新来的客人吧?于是就把每位客人的房间号都记在了纸上,然后把纸卷在了针上,大大节省了空间,这就是纸针(指针*)啦,^_^。为了安全,登记完的指针也放在客房里了,不过是没有人住的房间。
    为了区分不同身份的客人(本客栈不搞歧视,区分身份只是为了便于管理),客栈用颜色不同的纸来记录房间号,这就有了不同类型的指针,比如蓝色的char*这种指针只记录单人间的房间号,红色的int*只记录四人间的。看起来分这么多种类很混乱,但是如果有很多同类型的组团(数组)来住店时就方便了,上次int a[100]来旅游的时候,就找到那一沓100张红色的指针就可以知道谁住哪里了。比如团长a[0]的房间号记在第一张纸p上,那么翻开下一页(p++)你就找到了隔壁的房间号,你拿前四张去找人正好可以凑一桌麻将了。
虽然指针分为很多颜色(类型),但是不管多大的家族都只住一间屋子,只有一个房间号,所以无论什么颜色的指针都具有相同的大小,长度就是房间号那么长。
并非所有人都像int a[100]那么幸运,他们来的时候正好一层100个房间都没人住,于是他们可以住在同一片连续的区域。上次m, n, p, q, r一起来想住连续的几个屋子,方便一起去玩,偏偏找不到合适的房间,只好m住3楼,n住5楼,…,总之都很远。可是m老是来问老板他的朋友们住哪里?老板每次要找半天,后来想了个办法,把记录这几个人的指针用一个盒子*p[5](指针数组)放在一起,这样就方便多了。
    有的客人脾气很怪,比如char F[4],他们四个是一个乐队的,可是又不愿住四人间,非要一人住一间,还一定是连着的,如果不连着就不住,老板没办法,给他们找了连着的四间房。可是大牌还真是难缠,他们早上出去工作就退房,晚上又要回来住,老板又要给他们找连续的四间房,天天如此,而且每次都浪费四个指针,客栈的成本一下提高了。老板又想了个办法,他专门为这些人订做了另一种颜色的指针(*p)[4](指向数组的指针),他用这个指针记录他们老大F[0]的房间号,剩下的三位房间号就是紧挨着的三间,减少了不少浪费。
    一直忘了介绍客栈的两个伙计,一个叫“小&”,另一个叫”小*”,看外形就知道,”小*”比较圆滑,肯定是经常可客人,而“小&”肚子比较大,一看就是常年打算盘,记帐不活动造成的。有时候有人来客栈找住店的人,首先要查找客人的房间,“小&”就是负责去取保存房间号的指针的,比如上面提到的m想找r去逛街,“小&”就去找r的指针了(&r), “小&”找了半天,终于找到了r的指针p(p = &r),他把p交给”小*”, ”小*”就拿着p去叫客人了(*p就是r了)。看起来好像”小*”的工作比“小&”轻松,其实”小*”也不容易,他要区分指针的颜色(类型)来决定叫多少个人,比如拿的是蓝色的指针(上面说得是char型),就只叫一个客人就可以,如果是红色的(int)就得叫4位客人,如果少叫了一位楼下找人得客人会生气得,因为没有把要找的人找全。
    好了,这家客栈介绍完了,为了感谢你看到这里,现在客栈经营权就交给你了,希望你财源广进!
2015-02-01 10:14
shixin7216
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2012-7-18
收藏
得分:0 
2015-02-01 10:15
stinger121
Rank: 1
等 级:新手上路
帖 子:5
专家分:9
注 册:2015-2-3
收藏
得分:1 
指针是C的一个分支,居然要拿书来学,纯粹是浪费钱财.
指针不难,一点没有难度,或许你搞不明白是因为不了解内存什么的东西.
想学计算机,光学语言,是完全不够的,要了解计算机的结构.
内存里保存了几个G的东西,想要使其有价值,首先一点,就是要在必要的时候,找到合适的数据.
一堆数据,要如何能被准确的找到呢?
内存将数据安放在某个固定的位置,而这个位置,有一个唯一而确定的编号.
就像座位号一样,找到座位号,就可以找到座位,同时座位上的数据,也就触手可及了.
而这个座位号,就是所谓的"指针"了,所谓指针变量,就是用来保存这个座位号的变量.
每个变量都有意义,整型变量表达一个整数,字符变量表达一个字符(其实也可以当作整数用).
而指针,指针变量保存了某个地址,自然,它的意义就是某个座位.
通过指针可以找到某个座位,进而可以找到座位上的数据.

在内存中,地址(前面所说的座位号)是线性排列的(就是0 1 2 3 4 5 .......),指针可以进行偏移,就是从1,往后挪几位指向另一个位置3.
这样的操作,使得指针变量可以进行加减法,用来偏移寻址.
但是虽然指针也是一串有特殊意义的数字,但是针对指针这个身份来讲,乘除法毫无意义,所以对指针变量,是不能这么做的.
2015-02-03 09:55
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:1 
成也指针,败也指针。
2个资料,C和指针,让你不再害怕指针。

授人以鱼,不如授人以渔
2015-02-03 10:20
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:1 
如果这样写会不会更好懂一点?

char A = > 有A房间。
char A='A'; => A房间内住A一个人。

char A[5] => A栋只有一楼,此楼有5个房间。
char *A => A栋只有一楼,此楼房间数量未定。

char A[5][5] => A栋只有五楼,每楼有5个房间。
char **A => A栋很多楼(至少一层),每楼房间数量也未定。
char *A[5] => A栋很多楼(至少一层),每楼有5个房间。

char A[5]={0}; => A栋只有一楼,此楼有5个房间,房间内都没人。
char *A=NULL; => 有A栋,其他未知。

char A[5]={"A","B","C","D","E"}; => A栋只有一楼,此楼有5个房间,房间内依序住ABCDE五个人。
char *A="ABC"; => A栋只有一楼,此楼目前前3个房间内依序住ABC三个人。
char *A='A'; => A栋只有一楼,此楼有1个房间,房间内住A一个人。

&A[4] => 问A栋一楼4号房住的是谁。
&A => 问A栋在哪。
...
...
*(&A) =>
&&A =>
...
其他更复杂的我就不敢说了,请高手继续补上。

不要選我當版主
2015-02-03 14:27
a63568339
Rank: 2
等 级:论坛游民
帖 子:9
专家分:26
注 册:2015-2-3
收藏
得分:1 
先做几道和指针想关的题就理解了。
先理解:
指针和整形数组
指针和字符串
指针和结构体
指针和函数
前面都是基础,后面这个有点难,就是函数指针。
其实函数指针也不难,一开始先找函数指针类型,比如 int fun (int a, int b)  则他的函数指针类型是 int (*) (int , int)。 要想是函数指针变量指向这个函数,则需要
 int (*p)(int, int) = fun 即可。
先去慢慢打好前面的基础,有什么问题就关注 http://blog.
我Q 664709704

类人猿
2015-02-03 16:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
先把不用指針的程序寫好了,再說怎麽學指針的問題。很多時候,指針并不是必須的,它衹該用在該用的地方,用的自然,不要爲用指針而用指針。

授人以渔,不授人以鱼。
2015-02-03 21:32
快速回复:C语言 指针变量部分好难理解,求高手指导下怎么学,这部分用处大吗
数据加载中...
 
   



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

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