|
发表于 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也就是标识符, 指针就是插在这个坑里的一根“针管”, 用来标记这个坑的“位置”,所以指针的值是一个地址,地址就需要运用地址运算符,因此
我们可以通过叫这个坑的名字“i”来获得/改变值, 也可以通过“针管”标记的地址找到/改变值,整一个比喻就是:老师要叫坐在第一排第一个的小明去搞卫生, 可以叫小明这个名字, 也可以叫“坐在第一排第一个”的同学去搞卫生。
还有指向指针的指针,如:
就是在针管上再插一根针管,用来标记前一个针管,用ptr3这个针管去寻找ptr1这个针管,然后再通过ptr1找到i的值,每往前找一级,就需要用一次解引用符号*,因此
- *ptr1 == i == 0;
- *ptr3 == ptr1 == &i;
- **ptr3 == *ptr1 == i ==0;
复制代码
数组就是在某个地方(计算机找一块内存)连续挖几个坑, 指针指向第一个坑的位置。通过指针自增(如:ptr2++)或者加一个整数(ptr2 + 1),就能把针管往后挪一个坑插
多维数组可以换一种比喻, 如数组str, 把数组str的首元素(即str[0] )想象成一个这样的按钮
,点开会下拉出一个列表,这个列表就是{1, 2};
还有关于const的用法,假设
- const int * ptr;
- 或者
- int const * ptr;
复制代码
C规定以*作为分界点,因此看得出const和int是一伙的,所以const锁的是int, int是坑,坑用来存放值,因此锁int就代表不能通过指针改变这个指针所指向的int的值, 但是没有锁ptr,所以我们可以把指针从坑里拔出来指向其他地方
再比如
这时候const和ptr一伙,因此const锁的是ptr,因此ptr不能指向其他地方,但是他没有锁int这个坑,所以int的值可以改变
利用这些想象将规则理解之后,多刷题就好了 |
|