鱼C论坛

 找回密码
 立即注册
查看: 982|回复: 6

[已解决]怎么学好指针

[复制链接]
发表于 2020-9-4 10:28:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
指针学了几节,感觉学的一知半解的,真烧脑呀,谁能提供好的方法么?
最佳答案
2020-9-4 10:43:50
我给你的建议,当初我学习指针也是这样的:

    听课的时候,不求听懂,但是要听的仔细,脑子要转(哪怕听不懂,只要自己思考了就行),然后往后面听,当听完第一次C语言的时候,在返回去听第二次,基本这时候就
差不多能理解了,有些难的概念可能不懂,这时候就需要自己查资料(最好有一本C语言的书),上机实操了,然后自己主要的就是多写写指针方面的代码了,尤其是当你能找到
1 2 个bug的时候,那样对于指针的理解会有更深层次的了解,然后当你第三次在看小甲鱼视频的时候,就完全没问题了。
   注意:千万不要在指针这里死磕,因为,人嘛,容易专牛角尖,越不理解,越想理解,就越理解不了,还容易理解偏了,所以,看过去就好,然后看完的时候结合其他资料看看

   小甲鱼从讲解指针开始,后面讲课的内容都会多多少少带着点指针,所以慢慢看把,搞不好什么点通了,然后一下子就理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 10:39:15 | 显示全部楼层
多看几遍,五遍不行十遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-4 10:43:50 | 显示全部楼层    本楼为最佳答案   
我给你的建议,当初我学习指针也是这样的:

    听课的时候,不求听懂,但是要听的仔细,脑子要转(哪怕听不懂,只要自己思考了就行),然后往后面听,当听完第一次C语言的时候,在返回去听第二次,基本这时候就
差不多能理解了,有些难的概念可能不懂,这时候就需要自己查资料(最好有一本C语言的书),上机实操了,然后自己主要的就是多写写指针方面的代码了,尤其是当你能找到
1 2 个bug的时候,那样对于指针的理解会有更深层次的了解,然后当你第三次在看小甲鱼视频的时候,就完全没问题了。
   注意:千万不要在指针这里死磕,因为,人嘛,容易专牛角尖,越不理解,越想理解,就越理解不了,还容易理解偏了,所以,看过去就好,然后看完的时候结合其他资料看看

   小甲鱼从讲解指针开始,后面讲课的内容都会多多少少带着点指针,所以慢慢看把,搞不好什么点通了,然后一下子就理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-4 11:50:23 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-9-4 11:54 编辑

指针确实难学,却又不得不学,因为指针这个概念非常的重要而且实用。我在这里差不花了一个月了,不断看视频,看书,做笔记,做练习,总算是七窍通了五窍了。下面,我择一段我的学习笔记:

      设 p 指向数组 a 的首元素即 p = a:

      p++; 此时 *р;得到的下一个元素a[1]的值。

      *p++;由于 ++ 和 * 同优先级,结合方向为自右而左,因此它等价于 *(p++),先引用 p 的值,实现 *p 的运算,然后再使 p 自增1。如果 p 当前指向 a 数组中第 i 个元素a[ i ],则:*(p--)相当于a[ i-- ],先对 p 进行“*”运算(求 p 所指向的元素的值),再使 p 自减。

      *(p++)与*(++p)作用不相同! 前者是先取 *p 值,然后使 p 加1。后者是先使 p 加1,再取 *p。若 p 初值为a(即&a[0]),若输出*(p++),得到a[0]的值,而输出*(++p),得到a[1]的值。

      ++(*p)表示 p 所指向的元素值加1,--(*p)表示 p 所指向的元素值减1。如果p = a,则++(*p)相当于++a[0],若a[0]的值为3,则在执行++(*p)(即++a[0])后a[0]的值为4,注意:是元素a[0]的值加减1,而不是指针p的值加减1。

      *(++p)相当于a[++i ],先使 p 自加,再进行“*"运算。*(--p)相当于a[--i ],先使 p 自减,再进行“*"运算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-4 15:18:19 | 显示全部楼层
你要了解指针,我建议你先学逆向,把汇编的概念搞明白,然后再看几节C语言指针的专题课,然后就容易理解了
这个一定是一个长时间的积累的过程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-5 14:34:08 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-5 17:16:06 | 显示全部楼层
指针、数组、对象等等概念, 抽象化,想想比喻啥的方便理解, 比如假设
int i = 0;
int str[2][2] = { {1,2} , {3, 4}};
int *ptr1 = i;
int* ptr2 = str;
按小甲鱼视频里说的,int代表挖一个int大小的坑,然后要给这个坑起名字为i,i也就是标识符, 指针就是插在这个坑里的一根“针管”, 用来标记这个坑的“位置”,所以指针的值是一个地址,地址就需要运用地址运算符,因此
ptr = &i
我们可以通过叫这个坑的名字“i”来获得/改变值, 也可以通过“针管”标记的地址找到/改变值,整一个比喻就是:老师要叫坐在第一排第一个的小明去搞卫生, 可以叫小明这个名字, 也可以叫“坐在第一排第一个”的同学去搞卫生。
还有指向指针的指针,如:
int **ptr3 = ptr1;
就是在针管上再插一根针管,用来标记前一个针管,用ptr3这个针管去寻找ptr1这个针管,然后再通过ptr1找到i的值,每往前找一级,就需要用一次解引用符号*,因此
*ptr1 == i == 0;
*ptr3 == ptr1 == &i;
**ptr3 == *ptr1 == i ==0; 
数组就是在某个地方(计算机找一块内存)连续挖几个坑, 指针指向第一个坑的位置。通过指针自增(如:ptr2++)或者加一个整数(ptr2 + 1),就能把针管往后挪一个坑插
多维数组可以换一种比喻, 如数组str, 把数组str的首元素(即str[0] )想象成一个这样的按钮 按钮.jpg ,点开会下拉出一个列表,这个列表就是{1, 2};

还有关于const的用法,假设
const int * ptr;
或者
int const * ptr;
C规定以*作为分界点,因此看得出const和int是一伙的,所以const锁的是int, int是坑,坑用来存放值,因此锁int就代表不能通过指针改变这个指针所指向的int的值, 但是没有锁ptr,所以我们可以把指针从坑里拔出来指向其他地方
再比如
int * const ptr;
这时候const和ptr一伙,因此const锁的是ptr,因此ptr不能指向其他地方,但是他没有锁int这个坑,所以int的值可以改变

利用这些想象将规则理解之后,多刷题就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 03:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表