| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2499 人关注过本帖, 1 人收藏
标题:小鱼儿浅谈指针
只看楼主 加入收藏
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
结帖率:95.74%
收藏(1)
 问题点数:0 回复次数:28 
小鱼儿浅谈指针
c语言的指针可以说c语言灵魂,自己也学c一年多了说不精通,但还是有点解了(有些东西用的少还是不了解)。
看到好多新手对指针不能理解,有些人学c了 学了指针但还是不知道怎么一回事情。好多人觉得学数据结构实在
难,大多原因是他们没有弄白指针。因为数据结构用c表示的话 90%都要用指针 其实可以说100% 都要用到。
数组难道不指针吗!!! 几乎数组可以和指针互换。
比喻说 int *p;  和int p[]; 你调用指针的时候可以用p[n] n为一个合理的整数。 你用数组的时候可以用 int *c=&s[0];
  *c++;来调用。因为数组的数组名是固定的。他的地址是不能修改了 你不能s++  这样编译器是会报错的。
 
但数组比指针更容易理解。但指针的效率要比数组快,因为数组最终还是转换为指针(不记得是在那本书上看到过的)。
所以指针 数组各有好处。
 
指针的缺点就不说了,反正就是太灵活了,搞他不定人就容易出现大麻烦。
 
指针到底是什么。
 
我开始学c 一直不明白到底是什么,还到那里傻不拉唧的以为明白了指针是何物。当有一天和网上的高手和写一个项目的时候,
看他写的通用链表(这个链表写的有点像树,单向链表套用单向链表)。我开始以为看明白了,等我仔细分析他的代码,我才发现
我连指针是什么都不知道。
我开始以为
int *p; 和 char *p;  的区别就是
生存一个4个字节的内存来存放一个数据。 和 生存一个1个字节内存来存放数据。
 
现在看来真的好可笑啊。。
 
现在我认为指针是什么呢。
就是一个存放一个32整数数值的变量而已(在32位系统中);
不要被他的星号迷惑。int *p1; 和int p2;可以说在一些情况可以相同。p1=&a;(一个整数的变量a的110(假设的));
p2=110;可以说等价的。但现实中你不能这样做,你不能把一个地址直接赋值一个变量。
然后*p2来调用对应地址的数据。 这样是行的。我自己实验过。现在在别人家没有编程的工具 不好贴代码。
但你一可以直接赋值一个指针 来调用是可以的。p1=110; 这样是可以的。 不可以就奇怪了。从这点看出来 *  只是为了告诉编译器他是指针 你必须用指针的方式来调用他,申明类型也是这个道理, int a ; 和 char a ;  和 int *a;  和char *a; 只是告诉编译是怎么处理这些数据而已。说到底这些数据本质都是0 1 所以只是编译器怎么处理而已。不同的处理表示的含义就不同了。
 
从上面可以推出。
int *p  和 int * *p;
本质没有差别。
都是指针。
二级 和n 级指针都可以看成一级指针。放着内存的地址而已。只是编译器的处理方式不同而已。
 
上面自己简单谈了自己对指针的看法,自己的技术很菜,自己随便谈一下自己的指针认识。如果有些东西实在错了 欢迎指正。
 
然后谈一下看书。
 
反正高手都是推荐看外国的书。自己国内 国外都看过。确实外国要比中国写的好。写的认真。。。。。。。中国没有办法,大多是向钱看,所以好多书写的不准确。 而中国的学生又喜欢把书上的东西当成圣旨来看的。有些地方可能作者随便说的一句话,他却当真了,当他跟别的书上 或者别人说的产生矛盾。这样他自己都不知道谁对 谁错了。
所以说 书上的不可全信,通过自己动手实践了,然后思考 自然会得出一个正确的答案。
你可以先看中国的书 但不要全信,然后在看一下外国的书。比较加分析 你自然会明白谁对谁错了。这样你自己也会进步很快。


[ 本帖最后由 小鱼儿c 于 2012-1-17 03:27 编辑 ]
搜索更多相关主题的帖子: 小鱼儿 东西 c语言 
2012-01-17 02:18
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
发帖没有别的意思,只是在家这几天帮人做结婚的视频。
没有写代码。也没有学习。。
然后闲的慌,自己逛的一些论坛。貌似好多新手对指针不太了解。

自己就是随便谈谈指针的认识。。。希望大家不要走像对指针错误弯路而已。。。

希望和大家共同进步。。。

新年快乐。。。。。。
hellovfp 快乐。。。。。。。。。。。

用心做一件事情就这么简单
2012-01-17 02:23
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
顶,不错
不要被他的星号迷惑。
如果int* p;这么写,是否就不会有迷惑了呢?

为游戏狂~~!!    大家努力编哈!
2012-01-17 08:05
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
蛮好的,说明是用心学了

技术问题,请不要以短消息方式提问
2012-01-17 09:42
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
收藏
得分:0 
线性栈用不到……
2012-01-17 10:23
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用love24114在2012-1-17 10:23:41的发言:

线性栈用不到……
不知道你用什么申请内存呢。

用什么保存内存地址。

是用数组 还是 方法呢!!
望指点。。。

用心做一件事情就这么简单
2012-01-17 11:52
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用smallmoon521在2012-1-17 08:05:08的发言:

顶,不错如果int* p;这么写,是否就不会有迷惑了呢?
或许吧!!!!呵呵

用心做一件事情就这么简单
2012-01-17 11:52
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
收藏
得分:0 
struct STACK{
int data[100];
int top = -1;
}mystack;
2012-01-17 14:02
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用love24114在2012-1-17 14:02:18的发言:

struct STACK{
int data[100];
int top = -1;
}mystack;



你看看我说的这句话

数组难道不指针吗!!! 几乎数组可以和指针互换。
比喻说 int *p;  和int p[]; 你调用指针的时候可以用p[n] n为一个合理的整数。 你用数组的时候可以用 int *c=&s[0];
  *c++;来调用。因为数组的数组名是固定的。他的地址是不能修改了 你不能s++  这样编译器是会报错的。

但数组比指针更容易理解。但指针的效率要比数组快,因为数组最终还是转换为指针(不记得是在那本书上看到过的)。
所以指针 数组各有好处。


你的一百最好定义一个常量或者一个宏。。。
多是用一下typedef 这个东西方便点。。。

用心做一件事情就这么简单
2012-01-17 14:27
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用love24114在2012-1-17 14:02:18的发言:

struct STACK{
int data[100];
int top = -1;
}mystack;



你看看我说的这句话

数组难道不指针吗!!! 几乎数组可以和指针互换。
比喻说 int *p;  和int p[]; 你调用指针的时候可以用p[n] n为一个合理的整数。 你用数组的时候可以用 int *c=&s[0];
  *c++;来调用。因为数组的数组名是固定的。他的地址是不能修改了 你不能s++  这样编译器是会报错的。

但数组比指针更容易理解。但指针的效率要比数组快,因为数组最终还是转换为指针(不记得是在那本书上看到过的)。
所以指针 数组各有好处。


你的一百最好定义一个常量或者一个宏。。。
多是用一下typedef 这个东西方便点。。。


你的一百最好定义一个常量或者一个宏。。。
多是用一下typedef 这个东西方便点。。。
以下是引用love24114在2012-1-17 14:02:18的发言:

struct STACK{
int data[100];
int top = -1;
}mystack;



你看看我说的这句话

数组难道不指针吗!!! 几乎数组可以和指针互换。
比喻说 int *p;  和int p[]; 你调用指针的时候可以用p[n] n为一个合理的整数。 你用数组的时候可以用 int *c=&s[0];
  *c++;来调用。因为数组的数组名是固定的。他的地址是不能修改了 你不能s++  这样编译器是会报错的。

但数组比指针更容易理解。但指针的效率要比数组快,因为数组最终还是转换为指针(不记得是在那本书上看到过的)。
所以指针 数组各有好处。


你的一百最好定义一个常量或者一个宏。。。
多是用一下typedef 这个东西方便点。。。


你的一百最好定义一个常量或者一个宏。。。
多是用一下typedef 这个东西方便点。。。

[ 本帖最后由 小鱼儿c 于 2012-1-17 14:37 编辑 ]

用心做一件事情就这么简单
2012-01-17 14:32
快速回复:小鱼儿浅谈指针
数据加载中...
 
   



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

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