怎么学好指针
指针学了几节,感觉学的一知半解的,真烧脑呀,谁能提供好的方法么? 多看几遍,五遍不行十遍 我给你的建议,当初我学习指针也是这样的:听课的时候,不求听懂,但是要听的仔细,脑子要转(哪怕听不懂,只要自己思考了就行),然后往后面听,当听完第一次C语言的时候,在返回去听第二次,基本这时候就
差不多能理解了,有些难的概念可能不懂,这时候就需要自己查资料(最好有一本C语言的书),上机实操了,然后自己主要的就是多写写指针方面的代码了,尤其是当你能找到
1 2 个bug的时候,那样对于指针的理解会有更深层次的了解,然后当你第三次在看小甲鱼视频的时候,就完全没问题了。
注意:千万不要在指针这里死磕,因为,人嘛,容易专牛角尖,越不理解,越想理解,就越理解不了,还容易理解偏了,所以,看过去就好,然后看完的时候结合其他资料看看
小甲鱼从讲解指针开始,后面讲课的内容都会多多少少带着点指针,所以慢慢看把,搞不好什么点通了,然后一下子就理解了 本帖最后由 风过无痕1989 于 2020-9-4 11:54 编辑
指针确实难学,却又不得不学,因为指针这个概念非常的重要而且实用。我在这里差不花了一个月了,不断看视频,看书,做笔记,做练习,总算是七窍通了五窍了。下面,我择一段我的学习笔记:
设 p 指向数组 a 的首元素即 p = a:
p++; 此时 *р;得到的下一个元素a的值。
*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),若输出*(p++),得到a的值,而输出*(++p),得到a的值。
++(*p)表示 p 所指向的元素值加1,--(*p)表示 p 所指向的元素值减1。如果p = a,则++(*p)相当于++a,若a的值为3,则在执行++(*p)(即++a)后a的值为4,注意:是元素a的值加减1,而不是指针p的值加减1。
*(++p)相当于a[++i ],先使 p 自加,再进行“*"运算。*(--p)相当于a[--i ],先使 p 自减,再进行“*"运算。 你要了解指针,我建议你先学逆向,把汇编的概念搞明白,然后再看几节C语言指针的专题课,然后就容易理解了
这个一定是一个长时间的积累的过程 学习 指针、数组、对象等等概念, 抽象化,想想比喻啥的方便理解, 比如假设
int i = 0;
int str = { {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 )想象成一个这样的按钮,点开会下拉出一个列表,这个列表就是{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的值可以改变
利用这些想象将规则理解之后,多刷题就好了
页:
[1]