如何学习指针

[复制链接]
6333|39
coolRFHU 发表于 2012-8-26 22:33 | 显示全部楼层
指针就是地址,对每一个存储变量的位置直接进行操作,有的时候可以提高效率,当然是在没有把自己绕进去的前提下。
someonewho 发表于 2012-8-26 22:37 | 显示全部楼层
看看好教材 比如谭浩强的就不错
justbybing 发表于 2012-8-26 22:48 | 显示全部楼层
不是一两句能讲的情的,找一些视频看看也不错
sfesdm 发表于 2012-8-26 23:32 | 显示全部楼层
要理解内存地址
捡漏王子 发表于 2012-8-27 09:19 | 显示全部楼层
看看,学习下高手的经验
djky12 发表于 2012-8-27 10:08 | 显示全部楼层

RE: 如何学习指针

这是我从前从网上下载过来的,挺不错的一篇**,可以参考参考呀  多花点时间,就一定能搞定指针的 哈哈~~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
O狂且O 发表于 2012-8-27 11:52 | 显示全部楼层
C和指针
misra 发表于 2012-8-27 13:17 | 显示全部楼层
我用keil学指针 感觉不错
丶tiantian 发表于 2012-8-28 13:57 | 显示全部楼层
指针C语言的精华部分,这个得学会,楼主慢慢来、。
liugp25 发表于 2012-8-28 14:19 | 显示全部楼层
不错 资料收藏下 26# djky12
ledaa 发表于 2012-8-28 15:58 | 显示全部楼层
嗯,多看看吧
hongong 发表于 2012-8-28 17:04 | 显示全部楼层
指针我也很头痛啊
jojojoy 发表于 2012-8-28 17:06 | 显示全部楼层
指针真心挺难的╮(╯▽╰)╭
hisong 发表于 2012-8-28 17:17 | 显示全部楼层
感觉指针挺难的
journeycc 发表于 2012-8-28 18:01 | 显示全部楼层
以前学c最头疼指针~~~~~我扎扎扎 ~\(≧▽≦)/~啦啦啦
hawksabre 发表于 2012-8-28 18:49 | 显示全部楼层
今天花了点时间把指针重新搞了搞  基本搞通了   说穿了   指针本身是一个特殊的容器,C语言中,普通的容器用于存放你赋予该变量的数值(其实没这么简单   你就这样理解)   而指针这个特殊的容器用于存放某个变量的地址   当用的时候   只需要调用该指针就可以了   指针实质上通过存储的变量的地址调用你赋予变量的数值   希望你能理解   呵呵
xlhtracy 发表于 2012-8-29 14:00 | 显示全部楼层
看看各位的稿件
sunny丶 发表于 2012-8-29 14:48 | 显示全部楼层
买本书,网上找点资料,很容易啊。老是求别人经验,就没有抄近道的路。楼主靠自己慢慢学,难道还学不会?
okyouwin 发表于 2012-8-29 15:06 | 显示全部楼层
LS正解。
julien 发表于 2012-8-29 18:17 | 显示全部楼层
0. 一般人觉得指针难学因为在学指针前还没把表达式和变量的概念搞清楚。

1. 指针变量保存的是内存地址。用指针访问数据也称为间接寻址。类似于你找一个人,他住在“第一大院”。你直接去找第一大院就是直接寻址。如果他的住址只有一个住在“第五大院”的人知道,你去第五大院问出他家在第一大院这就是间接寻址。

1.+ 对于上面这种情况,如果我们认为第五大院是“知道他家住址的那个人的住址”,我们就可以进行一连串的间接寻址。另一方面也说明指针变量保存的地址也是数据的一种。

2. 指针变量的类型。指针变量的类型目的*仅仅*在于减少编程中可能发生的错误。这一点必须明确。根本上说指针变量的类型就是地址。我们为了避免不必要的错误强行加上了“只能保存整数的地址”之类的约束。好比住在第五大院的人只会去记中年人的地址。

3. 指针的操作。
3.0 声明:类型A的指针的类型写作 类型A* 比如int*。与此同时int*本身也是类型,我们可以写int**。就是int的指针的指针。
3.1 获取地址,对于内存变量表达式 &运算符可以获得其地址,类型是表达是类型的指针。比如对于变量int a。&a获得的就是类型是int *的a的地址。
3.2 重定向,对于指针变量或者指针变量表达式。*运算符可以获得其指向地址的变量,类型是原指针的上一级。对于int a; int* p = &a; *p等价于a,类型是int。因为*p是变量,我们可以进行x = *p(取值)和*p = 0(赋值)操作。
3.3 &和*都可以对变量表达式进行操作。比如数组int a[10]。我们可以通过&a[5]获得a第5个元素的地址。又如int** a。*a是一个int*类型的变量,我们可以进一步地**a获得类型是int的变量,这就是从第六大院的人口中问出知道A君住址的人在第五大院,然后再去第五大院问出A君住在第一大院的过程。

4. 数组和指针的混合。这个可以说是C/C++语法的bug...
int* a[4] 这个类型可以看成(int*)[4] 元素是int*类型,有4个元素
int (*a)[4] 这个其实是(int[4])* 指向int[4]类型变量的指针。

4.+ 数组变量其实也是指针。int b[4]; 变量b在多数情况下就是一个const int*,指向数组b所占用的内存,也就是数组b的第一个元素。*b和b[0]是等价的。对于int *a;我们可以直接进行a = b的操作,让指向数组b。

5. 指针的加法。对于int *a;我们可以进行a + N, a - N的运算。a + 1指向a指向的元素的下一个元素,相应的a - 1指向上一个元素,以此类推。于是*(a + 1)就对a指向的下一个元素进行重定向,等价于数组运算a[1]。

5.+ 对于int *a, *b; a - b获得的是b到a之间相差多少个元素,类型是int。比如 int x[5]; int *a = &x[0], *b = &x[3]; b - a的结果是3。相应的a - b的结果是-3。

这些大体概括了指针的基本内容,可能有疏漏,指针的应用就是指针的基本操作和其他表达式、变量操作的配合。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部