印度小哥讲解的指针, 真的很好, 这个附上链接:
https://www.bilibili.com/video/BV1bo4y1Z7xf/?spm_id_from=333.999.0.0
1. 内存的概念和变量存储
在内存中, 每一个字节都是有一个对应的编号. (一个字节占用了一个位置).
1.1 变量的存储
int a;
char c;
a = 5;
...
...
...
a++;
从下图中可以看到, 给 a
分配的内存地址有 4 个占据的是 204 ~ 207
, 起始的地址是:204
. 然后给 a
赋值为 5, 所以在 204 ~ 207
中以二进制的形式存储 5
,
然后执行到 a++
, 这里先找到 a
的起始地址, 然后修改 a
的值, 改为 6.
给 c
分配的地址有 1 个, 占据的是 209
;
2. 指针的概念
指针:指针是一个变量, 里面存放着另一个变量的内存地址.
指针可以指向另一个内存地址 (指针中存放的是另一个变量的起始地址)
, 也可以修改指针, 比如下图中:指针 p 可以指向 a , 也可以指向 b
.
而且指针也是有内存地址的(也占用空间),
2.1 指针的表示方式
下面这段代码表示 p
是一个指向整型的指针变量.
(p
是一个可以存放整型变量的地址的变量).
int* p;
2.2 用图模拟表示指针的创建
int a;
int* p;
p = &a;
a = 5;
print p; // 204, 因为p中存放的是“a”的地址.
print &a; // 204, 因为“a”的地址是“204”.
print &p; // 64, 因为“p”也是会占用空间的, 所以这里是“p”的地址.
print *p; // 5, 因为可以通过“解引用”操作符找到“p”中存储的地址对应的值.
*p = 8;
print a; // 8, 在上一行代码中, 通过“*p”对于“a”进行了修改.