发新帖我要提问
12
返回列表
打印

如何学习指针

[复制链接]
楼主: pangb
手机看帖
扫描二维码
随时随地手机跟帖
21
coolRFHU| | 2012-8-26 22:33 | 只看该作者 回帖奖励 |倒序浏览
指针就是地址,对每一个存储变量的位置直接进行操作,有的时候可以提高效率,当然是在没有把自己绕进去的前提下。

使用特权

评论回复
22
someonewho| | 2012-8-26 22:37 | 只看该作者
看看好教材 比如谭浩强的就不错

使用特权

评论回复
23
justbybing| | 2012-8-26 22:48 | 只看该作者
不是一两句能讲的情的,找一些视频看看也不错

使用特权

评论回复
24
sfesdm| | 2012-8-26 23:32 | 只看该作者
要理解内存地址

使用特权

评论回复
25
捡漏王子| | 2012-8-27 09:19 | 只看该作者
看看,学习下高手的经验

使用特权

评论回复
26
djky12| | 2012-8-27 10:08 | 只看该作者

RE: 如何学习指针

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

彻底搞定C指针.pdf

423.77 KB

使用特权

评论回复
27
O狂且O| | 2012-8-27 11:52 | 只看该作者
C和指针

使用特权

评论回复
28
misra| | 2012-8-27 13:17 | 只看该作者
我用keil学指针 感觉不错

使用特权

评论回复
29
丶tiantian| | 2012-8-28 13:57 | 只看该作者
指针C语言的精华部分,这个得学会,楼主慢慢来、。

使用特权

评论回复
30
liugp25| | 2012-8-28 14:19 | 只看该作者
不错 资料收藏下 26# djky12

使用特权

评论回复
31
ledaa| | 2012-8-28 15:58 | 只看该作者
嗯,多看看吧

使用特权

评论回复
32
hongong| | 2012-8-28 17:04 | 只看该作者
指针我也很头痛啊

使用特权

评论回复
33
jojojoy| | 2012-8-28 17:06 | 只看该作者
指针真心挺难的╮(╯▽╰)╭

使用特权

评论回复
34
hisong| | 2012-8-28 17:17 | 只看该作者
感觉指针挺难的

使用特权

评论回复
35
journeycc| | 2012-8-28 18:01 | 只看该作者
以前学c最头疼指针~~~~~我扎扎扎 ~\(≧▽≦)/~啦啦啦

使用特权

评论回复
36
hawksabre| | 2012-8-28 18:49 | 只看该作者
今天花了点时间把指针重新搞了搞  基本搞通了   说穿了   指针本身是一个特殊的容器,C语言中,普通的容器用于存放你赋予该变量的数值(其实没这么简单   你就这样理解)   而指针这个特殊的容器用于存放某个变量的地址   当用的时候   只需要调用该指针就可以了   指针实质上通过存储的变量的地址调用你赋予变量的数值   希望你能理解   呵呵

使用特权

评论回复
37
xlhtracy| | 2012-8-29 14:00 | 只看该作者
看看各位的稿件

使用特权

评论回复
38
sunny丶| | 2012-8-29 14:48 | 只看该作者
买本书,网上找点资料,很容易啊。老是求别人经验,就没有抄近道的路。楼主靠自己慢慢学,难道还学不会?

使用特权

评论回复
39
okyouwin| | 2012-8-29 15:06 | 只看该作者
LS正解。

使用特权

评论回复
40
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。

这些大体概括了指针的基本内容,可能有疏漏,指针的应用就是指针的基本操作和其他表达式、变量操作的配合。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则